Shia Message

ShiaMessage

概要

ShiaMessageは「ShiaObject間のメッセージ通信用のフォーマット」、
もしくはそのメッセージ通信そのものを指します。

ShiaObjectが他のShiaObjectと通信したい場合
  1. ShiaMessageを用意する。
  2. ShiaControllerに対して発行する。
  3. ShiaControllerが配送を行う。
  4. 対象のShiaObjectがShiaMessageを受け取る。
  5. (内部のelementにShiaMessageを渡す)
  6. (内部のelementが応答する)
  7. ShiaControllerに対して返答を渡す。
  8. ShiaControllerが返答を配送する。
のステップで通信が行われます。

通信は基本的に、同期通信です。
ネットワーク越しに発行する場合、非同期通信も想定されます。

応答

メッセージを受けとったオブジェクトは、応答を行います。
応答は、任意の文字列もしくは空です。

返答

返答として返却される値は、「ステータス」と「返り値」の2つから構成されます。
「ステータス」は通信の成功/失敗を示し、「返り値」は対象から返された応答となります。
statusvalueexplain
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