WappenLiteフロントエンドの実装

このサンプル実装を参考にしながら、 以下をお読み下さい。

フロントエンドのサンプル実装中のファイルの解説

注: フロントエンドを実装するとき、バックエンドの API を適切に利用していれば、 必ずしもサンプル実装の構成に従う必要はありません。 サンプル実装はカスタマイズの出発点の一つとして利用して下さい。

フロントエンドのサンプル実装は、以下のようなファイルから構成されています。

ファイル名説明
HSBGrad.html メインページのサンプル
ColorTest.html 同じくメインページのサンプル
HSBGrad2.html Session/Runサーブレットのinputパラメーターを用いるサンプル
outerapplet.html バックエンドを起動する HTMLファイル
Common/common.js エディター部とコンソール部で共通に使用されるスクリプト
Common/commonUI.js GUIに依存するスクリプト
Common/console.js コンソール部で使用されるスクリプト
Common/consoleUI.js コンソール部で使用されるスクリプトのうち、 GUIに依存する部分
Common/editor.js エディター部で使用されるスクリプト
Common/editorUI.js エディター部で使用されるスクリプトのうち、 GUIに依存する部分

この中でパラメーターを設定する部分は、主にメインページです。

Adobe FlexBuilder用の参照フロントエンド もあります。

メインページ (HSBGrad.html, ColorTest.html)

バックエンドのベースURLを Query Stringとして受け取ることができます。 バックエンドのベースURLを Query Stringとして受け取らなかった場合は、 クッキーを使って、他のページからバックエンドが既に起動されている場合は、 それを再利用するようになっています。 また、バックエンドが起動していないときは、 リンクを明示的にクリックして、別ウインドウで outerapplet.htmlを開くようになっています。

outerapplet.htmlや editor.js, console.jsから呼び出されるコールバック関数をここに定義します。 これらのコールバック関数には、 このページで表示されるソースプログラム固有の設定情報を記述します。

outerapplet.html

バックエンドを起動するためのパラメーター (JARファイルや WARファイルなど)はここに記述します。

Common/common.js

バックエンドURLに関するスクリプトです。通常、変更する必要はありません。

Common/commonUI.js

バックエンドURLに関するスクリプトのうち、GUIに依存する部分です。

Common/console.js

コンソールフレームで使用されるスクリプトです。 ブラウザーが WebSocket をサポートしている場合は WebSocketを、 サポートしていないときは Cometを用いてバックエンドと通信します。

Common/consoleUI.js

コンソールフレームで使用されるスクリプトのうち、GUIに依存する部分です。

Common/editor.js

エディター部で使用されるスクリプトです。 キーワードのハイライトなどには CodeMirror を使用しています。

Common/editorUI.js

エディター部で使用されるスクリプトのうち、GUIに依存する部分です。

バックエンド(サーブレット)API

起動パラメータ

フロントエンドは、バックエンドのベース URL (例えば、http://localhost:12345/WappenLite/) を、起動時などに JavaScriptの location.searchパラメーターや serverURLというパラメーター、あるいは LiveConnect経由で受け取ります。 バックエンドにアクセスするためには、 このベース URLの後に以下に示す各サーブレットのパスとパラメーターを付加します。

サーブレット一覧

フロントエンドは、次の表に示すサーブレットと通信します

パス説明
Session/Configureコンテキストのパラメーターの変更
Session/Loadエディターの初期コンテンツ
Session/Saveエディター編集内容の保存
Session/Statusプログラム処理系のステータス情報(コンテキスト依存)
Session/Runプログラムの実行
Session/Execプログラムの実行とWebSocketによる接続
Session/Writeプログラムの標準入力へ書込み
Session/Readプログラムの標準出力の読込み
Session/ConnectWebSocketによる接続
Session/Viewプログラムの出力ファイルなどの閲覧
Session/UploadToDo

Session/Configure

バックエンドの設定パラメーターを変更します。

パラメーター configに、JSON形式のバックエンド設定ファイル(後述)の URLを指定します。または、パラメーター jsonに、 JSON形式のパラメーターを直接指定します。

Session/Load

エディターに表示するソースコードをダウンロードするために使用します。 ページのリロードのときに、以前にセーブした内容を再表示するために必要になります。

パラメーターなしで呼び出します。 結果はソースのパスをキー、内容を値とするJSON形式です。

Session/Save

エディターで変更された内容を保存するために使用します。

ソースのパスに edit:を前に付加したものをパラメーター名として使用し、 ソースの内容がその値となります。

saveというパラメーター名で、 ソースのパスをキー、内容を値とする JSON形式をパラメーターとして、 受け取ることも可能です。

コンパイラのエラーメッセージがあれば返します。 (コンパイラのメッセージはSesion/Readからもアクセスできます。)

Session/Status

コンテキストや言語処理系のステータス情報を得ます。 パラメーターなしで呼び出します。 結果はステータス名をキー、内容を値とする JSON形式です。 どのようなステータスが用意されるかはコンテキスト依存ですが、 runningという現在プログラムやインタプリターが実行中かどうかを示すフィールドは、 すべてのコンテキストがサポートするようにしています。

Session/Run

コンパイラー方式の処理系では、プログラムを実行します。 (インタプリター方式の処理系では、通常このサーブレットは使用しませんが、 一旦終了したインタプリターを別パラメーターで起動するときに使用できます。)

パラメーター argsで、コマンドライン引数を空白区切りで渡します。

プログラムは通常、非同期で実行されます。 (つまり、Runサーブレットはプログラムの終了を待ちません。) そのため、このサーブレットは意味のある出力は返しません。

ただし、プログラムの標準入力に渡す文字列を引数 inputとして渡すと、 同期モードで実行し(つまり、プログラム実行の終了を待ち)、 標準出力に出力された文字列を返します。

Session/Exec

コンパイラー方式の処理系では、プログラムを実行します。 (インタプリター方式の処理系では、通常このサーブレットは使用しませんが、 処理系によっては “main”を起動するなどの 使い方も可能です。)

パラメーター argsで、コマンドライン引数を空白区切りで渡します。

Session/Runと異なり、 プログラムの標準入力と標準出力(+標準エラー出力)に WebSocketによって接続します。 このときの標準出力(+標準エラー出力)はSession/ReadSession/Connectのほうには出力されません。

Session/Write

パラメーター messageで、 実行中のプログラムの標準入力に文字列を渡します。

また パラメーター eoftrue にすると、 実行中のプログラムにEOFを渡します。

Session/Read

実行中のプログラムの標準出力を得ます。

パラメーター indexで、受け取る文字列の最初の添字を指定します。 indexを省略すると、前回受け取った出力の続きになります。

パラメーター forceを指定しない、またはfalseのときは、 index以降の文字列がまだ出力されていなければ待機します。 (Comet方式の通信で使用します。) trueのときは、index以降の文字列がまだ出力されていなくても、 すぐに空文字列を返します。

Session/Connect

WebSocketによって接続します。 WebSocketをサポートしているブラウザで、Session/Readの代わりに使用します。

バックエンドから送られるメッセージは JSON形式で、 statusというフィールドに、Session/Statusの出力と同じ情報が、 outputというフィールドに、Session/Readの出力と同じ情報が、 格納されています。

逆にバックエンド側に JSON形式でメッセージを送ることもできます。 write#messageというフィールドに、Session/Writeのパラメーターと 同じ情報を記述します。

Session/View

プログラムが生成したファイルなどを閲覧します。

パラメーターpathで、ファイルのパスを指定します。

目次に戻る


Koji Kagawa (kagawa _at_ eng _dot_ kagawa-u _dot_ ac _dot_ jp)