ToolTalk ユーザーズガイド

メッセージの基本的なフローを教えてください

メッセージフローには、次の 2 種類があります。

セッションを配信範囲とするメッセージフロー

セッションを配信範囲とするメッセージの基本的なフローは、次のとおりです。

  1. クライアントが要求メッセージを作成し、tt_message_send を呼び出します。

  2. ttsession がハンドラを見つけます。

    ttsession はハンドラを起動する際に、環境変数 TT_TOKEN を設定します。

  3. ハンドラが動作を開始し、tt_opentt_fd を呼び出して、ttsession への通信を確立します。

  4. ハンドラは自分の ptype を ttsession に宣言します。

  5. ttsession は ptype の静的パターンをすべて動的パターンに変更します。

    この時点では、ハンドラがまだセッションに参加していないため、そのパターンは無効です。

  6. ハンドラがセッションに参加して、パターンが有効になります。

  7. ttsession は、メッセージが待ち行列に入っていることをハンドラに通知します。

  8. ハンドラはファイル記述子で通知を受け、tt_message_receive を呼び出してそのメッセージを検索します。

    tt_message_receive が返したメッセージ状態が TT_WRN_START_MESSAGE の場合、ToolTalk サービスはすでにそのプロセスを起動してメッセージを配信済みです。この場合 ptype 用のメッセージは、プロセスがメッセージ (通知の場合でも) に対して応答、拒否、異常終了のいずれかの処理を行うか、tt_message_accept を呼び出すまでブロックされます。

  9. ハンドラは要求された操作を実行します。

  10. ハンドラは要求に対する応答を返します。

  11. ttsession は、(応答) メッセージが待ち行列に入っていることをクライアントに通知します。

    クライアントのファイル記述子が有効になります。


    注 -

    実際には、要求メッセージの状態が変化するたびに、クライアントはメッセージを受信します。


  12. クライアントは tt_message_receive を呼び出し、結果を検索します。

ファイルを配信範囲とするメッセージフロー

ファイルを配信範囲とするメッセージの基本的なフローは、次のとおりです。

  1. ファイルを配信範囲とするパターンが登録されます。

    ファイルと、パターンを登録しようとしているセッションを、libtt がデータベースサーバーに通知します。

  2. libtt はデータベースサーバーに照会して、指定されたファイルを処理対象として登録しているクライアントのセッションをすべて検索します。

    • 通知の場合、libtt はこれらのセッションすべてと直接通信します。

    • 要求の場合、libtt はメッセージと、関連する他のセッションリストをそのセッションに通知します。

  3. これらのセッションは互いに通信し合い、ハンドラを探します。