Ikagaka Ghost API - Ikagaka/Ghost.js GitHub Wiki
Ikagaka Ghost API は WebBrowser (HTML5, DOM level 4, ES6 相当) 環境で伺かのGhostを動かすための API です。
Ikagaka Ghost API は栞のラッパです。この仕様を満たしていれば、どこでどのように栞が動作してもかまいません。たとえば、emscriptenした栞を WebWorkersで動かしてもよいですし、 WebSocketを使ってWebServerで動く栞にお伺いを立てても構いませんし、あるいは WebRTC によるP2P通信で栞のクラスタを作っても面白いでしょう。
Ikagaka Ghost API は UI スレッドで動作します。emscriptenを使った栞を利用する場合、 UI スレッドをノンブロッキングに動作させるため、またGCを円滑に行うためにWebWorkersの中でemscripten栞を動かし、Ghostクラスは Worker の UI スレッド側のインタフェースとして使うことをお勧めします。
栞の判別はベースウェアが行います。
var ghost = new Ghost(ghostDir);
ghost.load().then((ghost)=> {
ghost.request({})
.then((response)=> console.log(response) );
});
2015-01-28 時点の仕様草案です。
※この仕様は策定中です。Ikagaka Ghost API 1.0 (WD)議論スレッドも参照してください。 質問、提案、ご意見お待ちしています。
仕様の記述にはTypeScriptの型定義記法を利用しています。
Ghost クラスは栞のラッパーです。
この API 仕様を満たしていれば、栞はどこでどのように動いても構いません。
たとえば、 栞は Web Server で動かし、入出力は XMLHttpRequest や WebSocket を用いるような栞も動作させられます。
declare class Ghost {
constructor( directory: { [filePath: string]: ArrayBuffer; } );
// コンストラクタです。
// ghost/masterフォルダ直下のdescript.txtのあるディレクトリのファイルが渡されます。
// directory["ghost/master/descript.txt"] instanceof ArrayBuffer
load(): Promise<Ghost>;
// Ghost はこのタイミングで栞を load してください。
// worker で栞を使う場合、このタイミングで directory を transferable として worker に渡してください。
// 栞が error を吐いた場合、 reject(err: Error) してください。
request( request: requestObject ): Promise<responseObject>;
// 栞が error を吐いた場合、 reject(err: Error) してください。
unload(): Promise<Ghost>;
// Ghost はこのタイミングで栞を unload してください。
// worker で栞を使う場合、このタイミングで directory を transferable として UI スレッド側に返却してください。
// この後、ベースウェアによるディレクトリの保存処理が始まります。
// 栞が error を吐いた場合、 reject(err: Error) してください。
}
interface requestObject {
}
interface responseObject {
}