Shia Message
ShiaMessage
概要
ShiaMessageは「ShiaObject間のメッセージ通信用のフォーマット」、
もしくはそのメッセージ通信そのものを指します。
ShiaObjectが他のShiaObjectと通信したい場合
- ShiaMessageを用意する。
- ShiaControllerに対して発行する。
- ShiaControllerが配送を行う。
- 対象のShiaObjectがShiaMessageを受け取る。
- (内部のelementにShiaMessageを渡す)
- (内部のelementが応答する)
- ShiaControllerに対して返答を渡す。
- ShiaControllerが返答を配送する。
のステップで通信が行われます。
通信は基本的に、同期通信です。
ネットワーク越しに発行する場合、非同期通信も想定されます。
応答
メッセージを受けとったオブジェクトは、応答を行います。
応答は、任意の文字列もしくは空です。
返答
返答として返却される値は、「ステータス」と「返り値」の2つから構成されます。
「ステータス」は通信の成功/失敗を示し、「返り値」は対象から返された応答となります。
status | value | explain |
Success |
return value
|
メッセージ通信に成功しました。
|
Object not found |
error message
|
オブジェクトが見つかりませんでした。
(ShiaControllerが返します。)
|
Element not found |
error message
|
オブジェクトは見つかりましたが、その先が見つかりませんでした。
(ShiaObjectが返します。)
|
Illegal argument |
error message
|
引数が不正です。
|
message rejected |
error message
|
メッセージの受け取りを拒否されました。
|
timeout |
error message
|
通信がタイムアウトしました。
(リモート・メッセージ時)
|
|
|
|
構造
ShiaMessageは 「 ShiaPath + Argument-Dict 」で構成されます
通信相手をShiaPathで指定し、引数とともに要求します。
一般的にはMessage(String path, Dictionary arg);な実装になると思います。
オリジナルShiaでは
- (NSString *) call:(NSString *)path withArg:(NSDictionary *)args
と実装されていました。
この場合、メソッド呼び出しがShiaMessageそのものになります。
表現
ShiaMessageを表現する場合
接頭詞「[」に続けて、ShiaPath、スペース、argumentとする事が一般的です。
例えばShiaPathが「Shia.ObjectIdentifier.Element.action」、
Argumentsが{"key1":"val1", "key2":"val2"}の場合
[Shia.ObjectIdentifier.Element.action key1:value1 key2:value2
のようになります。
外部ネットワーク
オプション仕様。
ShiaPathのrootに「shia」以外の文字をとる事により
ShiaControllerに接続された外部のネットワークと通信する事ができます。
ここで「外部のネットワーク」とは
「ShiaController以下に形成されるShiaMessage-Network」以外のもの
を指します。
Artesema OGLでは既存のArteOGL system上にMisyaを移植し
限定実装したShiaの外部にArteOGLを「arte」として設定する事で
ArteOGLとShia/Misyaとの共存を実現しています。
[arte.storygame.run map:pl1 onclearsce:sce_pl2 onfailsce:sce_pl_over
リモート・メッセージ
オプション仕様。
HTTPプロトコル越しにShiaMessageの送受信を行う事が出来ます。
これにより、サーバ側とリモートのクライアント側で処理を共有する事が出来ます。
サーバ側のオブジェクトとクライアント側のオブジェクトを混在させ
それぞれから柔軟に選択、構成することで
ようするに、その、面白い事になります。
Shia Message List
以下に応答のリストがあります。
#ShiaMessage