ここでは OXexpression の標準 encoding の概略を説明する. この encoding 法はTCP/IP ソケット用の encoding 法として 現在存在しているサーバに使用されている. さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに ついても説明する.
destination, origin の部分は, ソケットによる peer to peer の接続なので省略する. extension フィールドは message_tag フィールドの次にくる. extension フィールドは OX パケットのシリアル番号がはいる. シリアル番号は int32 である. この番号は, サーバがエラーを起こした場合, エラーをおこした, OX パケットの番号を戻すのに主に利用される. 以下 extension フィールドは, message_tag の に含まれると理解し extension フィールドは省略する. したがってパケットは 次のように記述する
ox message_tag | message_body |
が, もっとこまかく見ると,
ox message_tag, serial number | message_body |
となっている.
グループ OX Message/TCPIP/Primitive の ox message_tag としては次のものが用意されている.
@plugin/oxMessageTag.h
#define OX_COMMAND 513 #define OX_DATA 514 #define OX_DATA_WITH_LENGTH 521 #define OX_DATA_OPENMATH_XML 523 #define OX_DATA_OPENMATH_BINARY 524 #define OX_DATA_MP 525 #define OX_SYNC_BALL 515 #define OX_NOTIFY 516
通信路は 2 つ用意する.
1番目の通信路は
OX_COMMAND
および
OX_DATA
がながれる.
2番目の通信路 (controlと呼ぶ) には,
OX_COMMAND
およびそれに続くコントロールコマンド
SM_control_*
またはコントロール関係のデータ, つまり header
OX_DATA
ではじまりそれに続く CMO データ
がながれる.
これらをコントロールメッセージおよびコントロールメッセージの結果
メッセージと呼ぶ.
サンプルサーバでは, この 2 つの通信路を, 2 つのポートを用いて
実現している.
OX_COMMAND
メッセージは次の形のパケットで表現される:
OX_COMMAND | int32 function_id |
message_tag | message_body |
OX_DATA
メッセージは次の形のパケットで表現される:
OX_DATA | CMO data |
message_tag | message_body |
コントロールメッセージは次の形のパケットで表現される:
OX_COMMAND | int32 function_id |
コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する, debug モードを抜けたい, などの用途に利用する.
コントロールメッセージの結果メッセージは次の形のパケットで表現される:
OX_DATA | CMO_INT32 | int32 data |
int32 function_id の部分に, サーバスタックマシン の operator に対応する番号がはいる. グループ SMobject/Primitive および SMobject/Basic に属する タグとして以下のものがある.
@plugin/oxFunctionId.h
#define SM_popSerializedLocalObject 258 #define SM_popCMO 262 #define SM_popString 263 #define SM_mathcap 264 #define SM_pops 265 #define SM_setName 266 #define SM_evalName 267 #define SM_executeStringByLocalParser 268 #define SM_executeFunction 269 #define SM_beginBlock 270 #define SM_endBlock 271 #define SM_shutdown 272 #define SM_setMathCap 273 #define SM_executeStringByLocalParserInBatchMode 274 #define SM_getsp 275 #define SM_dupErrors 276 #define SM_control_kill 1024 #define SM_control_reset_connection 1030
たとえば,
は
int32 513 | int32 265 |
とエンコードされる.
operator の詳細は次の節で説明する. これらの定数の名前はインプリメントのとき短縮形で表現してもよい.