next up previous contents
: OX スタックマシン : OpenXM の通信モデル : OX メッセージの表現 (XML)   目次

OXexpression の 標準 encoding と TCP/IP ソケットによる実装法

通信の実現方法は通信路のとりかたによりかわるが, 論理構造は統一的にあつかわないといけない. OXexpression はその論理構造を記述している.

ここでは 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_COMMAND, (SM_*))

OX_DATA メッセージは次の形のパケットで表現される:
OX_DATA CMO data
message_tag message_body
,      (OX_DATA, CMObject data)

コントロールメッセージは次の形のパケットで表現される:
OX_COMMAND int32 function_id
,      (OX_COMMAND,(SM_control_*))

コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する, debug モードを抜けたい, などの用途に利用する.

コントロールメッセージの結果メッセージは次の形のパケットで表現される:
OX_DATA CMO_INT32 int32 data
,      (OX_DATA, Integer32 n)

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

たとえば,

(OX_COMMAND, SM_pops)

int32 513 int32 265

とエンコードされる.

operator の詳細は次の節で説明する. これらの定数の名前はインプリメントのとき短縮形で表現してもよい.


next up previous contents
: OX スタックマシン : OpenXM の通信モデル : OX メッセージの表現 (XML)   目次
Nobuki Takayama 平成15年5月13日