メッセージフローには、次の 2 種類があります。
セッションを配信範囲とするもの
ファイルを配信範囲とするもの
セッションを配信範囲とするメッセージの基本的なフローは、次のとおりです。
クライアントが要求メッセージを作成し、tt_message_send を呼び出します。
ttsession がハンドラを見つけます。
ttsession はハンドラを起動する際に、環境変数 TT_TOKEN
を設定します。
ハンドラが動作を開始し、tt_open と tt_fd を呼び出して、ttsession への通信を確立します。
ハンドラは自分の ptype を ttsession に宣言します。
ttsession は ptype の静的パターンをすべて動的パターンに変更します。
この時点では、ハンドラがまだセッションに参加していないため、そのパターンは無効です。
ハンドラがセッションに参加して、パターンが有効になります。
ttsession は、メッセージが待ち行列に入っていることをハンドラに通知します。
ハンドラはファイル記述子で通知を受け、tt_message_receive を呼び出してそのメッセージを検索します。
tt_message_receive が返したメッセージ状態が TT_WRN_START_MESSAGE
の場合、ToolTalk サービスはすでにそのプロセスを起動してメッセージを配信済みです。この場合 ptype 用のメッセージは、プロセスがメッセージ (通知の場合でも) に対して応答、拒否、異常終了のいずれかの処理を行うか、tt_message_accept を呼び出すまでブロックされます。
ハンドラは要求された操作を実行します。
ハンドラは要求に対する応答を返します。
ttsession は、(応答) メッセージが待ち行列に入っていることをクライアントに通知します。
クライアントのファイル記述子が有効になります。
実際には、要求メッセージの状態が変化するたびに、クライアントはメッセージを受信します。
クライアントは tt_message_receive を呼び出し、結果を検索します。
ファイルを配信範囲とするメッセージの基本的なフローは、次のとおりです。