プロセス指向メッセージに関して、メッセージを処理すべきプロセスの ptype または procid が送信側アプリケーションにわかっている場合があります。これに該当しないメッセージに関して、ToolTalk サービスはメッセージの操作と引数からハンドラを判定します。
初期化
送信側はメッセージハンドルを取得し、アドレス属性、配信範囲属性、およびクラス属性を書き込みます。
送信側は、操作属性と引数属性を書き込みます。
送信側が ptype を 1 つだけ宣言した場合、ToolTalk サービスはデフォルトとして sender_ptype を書き込みます。それ以外の場合は、送信側が sender_ptype を書き込まなければなりません。
配信範囲が TT_FILE
の場合は、ファイル名を書き込む必要があります。書き込まない場合は、デフォルトのファイル名が使用されます。配信範囲が TT_SESSION
の場合は、セッション名を書き込む必要があります。書き込まない場合は、デフォルトのファイル名が使用されます。配信範囲が TT_BOTH
または TT_FILE_IN_SESSION
の場合は、ファイル名とセッション名の両方を書き込む必要があります。書き込まない場合は、デフォルトのファイル名とセッション名が使用されます。
配信に関して検査される一連のパターンは、メッセージの配信範囲によって異なります。配信範囲が TT_SESSION
の場合は、同じセッション内のプロセスのパターンだけが検査されます。配信範囲が TT_FILE
の場合は、ファイルを監視するすべてのプロセスのパターンが検査されます。配信範囲が TT_FILE_IN_SESSION
または TT_BOTH
の場合は、その両者に該当するプロセスが検査されます。
送信側は、handler_ptype がわかっている場合は書き込んでもかまいません。ただしその場合は、ある ptype のプロセスを別の ptype に置き換えられなくなるので、柔軟性がかなり低くなります。またこの場合、送信側が処置属性を指定しなければなりません。
ハンドラへのディスパッチ
ToolTalk サービスは、アドレス、配信範囲、メッセージクラス、操作、および引数のモードと型を、各 ptype の Handle セクションのすべてのシグニチャと比較します。
操作と引数に一致し、ハンドルを指定するメッセージパターンを含んでいる ptype は、通常 1 つだけです。ToolTalk サービスは、ハンドラの ptype を検索すると、ptype のメッセージパターンから opnum、handler_ptype、および「処置」を書き込みます。
アドレスが TT_HANDLER
の場合、ToolTalk
サービスは指定された procid を探索し、ハンドラのメッセージ待ち行列にメッセージを追加します。パターン照合は行わないので、TT_HANDLER
メッセージを監視できません。
オブザーバへのディスパッチ
ToolTalk サービスは、配信範囲、クラス、操作、および引数の型を、各 ptype の Observe セクションのすべてのメッセージパターンと比較します。
メッセージに一致して、TT_QUEUE
または TT_START
を指定するすべての監視シグニチャに関して、ToolTalk サービスは、ptype
と待ち行列を指定するメッセージまたは開始オプションを指定するメッセージに、レコード (「約束監視」と呼ばれます) を付加します。その後 ToolTalk
サービスは、内部の ObserverPtypeList に ptype を追加します。
ハンドラへの配信
実行中のプロセスがメッセージに一致する登録済みハンドラメッセージパターンを持っている場合、ToolTalk サービスはメッセージをそのプロセスに配信します。それ以外の場合、ToolTalk サービスは、処置 (開始または待ち行列) オプションに従います。
ハンドラ情報に一致する動的パターンを複数のプロセスが登録している場合は、より限定的なパターン (ワイルドカード以外に一致しているものの数を数えることによって判定する) が優先されます。2 つのパターンが同等に限定的である場合、ハンドラが任意に選択します。
オブザーバへの配信
ToolTalk サービスは実行中のプロセスのうち、メッセージに一致するオブザーバパターンを登録したすべてのプロセスにメッセージを渡します。ToolTalk サービスは配信のたびに、オブザーバの ptype について約束監視の完了状態を検査します。このプロセスが終わった時点で未完了の約束監視が残っている場合、ToolTalk サービスは、その約束に指定されている開始オプションと待ち行列オプションに従います。
この例では、デバッガはエディタを使用して、ToolTalk メッセージを介してブレークポイント周辺のソースを表示します。
エディタは、ptype の中に次のハンドルパターンを持っています。
(HandlerPtype: TextEditor; Op: ShowLine; Scope: TT_SESSION; Session: my_session_id; File: /home/butterfly/astrid/src/ebe.c) |
デバッガはブレークポイントに到達すると、操作属性 (ShowLine)、引数属性
(行番号)、ファイル属性 (ファイル名)、セッション属性 (現在のセッション ID)、および配信範囲属性 (TT_SESSION
) を含むメッセージを送信します。
ToolTalk サービスは、登録されているすべてのパターンとメッセージを照合して、エディタが登録したパターンを検索します。
ToolTalk サービスは、エディタにメッセージを配信します。
その後エディタは、引数で示した行へスクロールします。