Ikagaka Ghost API - Ikagaka/Ghost.js GitHub Wiki

Ikagaka Ghost API について

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 スレッド側のインタフェースとして使うことをお勧めします。

栞の判別方法

栞の判別はベースウェアが行います。

Ikagaka Ghost API の使用例

var ghost = new Ghost(ghostDir);

ghost.load().then((ghost)=> {
  ghost.request({}) 
  .then((response)=> console.log(response) );
});

Ikagaka Ghost API 1.0 (Working Draft)

2015-01-28 時点の仕様草案です。

※この仕様は策定中です。Ikagaka Ghost API 1.0 (WD)議論スレッドも参照してください。 質問、提案、ご意見お待ちしています。

仕様の記述にはTypeScriptの型定義記法を利用しています。

Ghost

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 {
}
⚠️ **GitHub.com Fallback** ⚠️