ToolTalk サービスが処理するメッセージの多くはオブジェクト宛てですが、実際にはオブジェクトを管理するプロセスに配信されます。メッセージは、特定のメッセージを処理できるプロセスの ptype を含んだ otype にシグニチャを書き込み、ToolTalk サービスがオブジェクト指向メッセージを配信する必要があるプロセスを判定するのを助けます。
初期化
送信側はクラス属性、操作属性、引数属性、および対象とする objid 属性を書き込みます。
送信側属性は、ToolTalk サービスによって自動的に書き込まれます。送信側は、sender_ptype 属性とセッション属性を書き込むことも、ToolTalk サービスにデフォルト値を書き込ませることもできます。
配信範囲が TT_FILE
の場合は、ファイル名を書き込む必要があります。書き込まない場合は、デフォルトのファイル名が使用されます。配信範囲が TT_SESSION
の場合は、セッション名を書き込む必要があります。書き込まない場合は、デフォルトのセッション名が使用されます。配信範囲が TT_BOTH
または TT_FILE_IN_SESSION
の場合は、ファイル名とセッション名の両方を書き込む必要があります。書き込まない場合は、デフォルトのファイル名とセッション名が使用されます。
配信に関して検査される一連のパターンは、メッセージの配信範囲によって異なります。配信範囲が TT_SESSION
の場合は、同じセッション内のプロセスのパターンだけが検査されます。配信範囲が TT_FILE
の場合は、ファイルを監視するすべてのプロセスのパターンが検査されます。配信範囲が TT_FILE_IN_SESSION
または TT_BOTH
の場合は、その両者に該当するプロセスが検査されます。
解釈処理
ToolTalk サービスは、ToolTalk データベースで objid を検索し、otype 属性とファイル属性を書き込みます。
ハンドラへのディスパッチ
ToolTalk は、otype 定義内でメッセージの操作属性と引数属性に一致するハンドラのメッセージパターンを検索します。一致するものが見つかると、ToolTalk サービスは otype のメッセージパターンから、配信範囲属性、opnum 属性、handler_ptype 属性、および処置属性を書き込みます。
オブジェクト指向オブザーバへのディスパッチ
ToolTalk サービスは、メッセージのクラス属性、操作属性、および引数属性を、otype のすべての Observe メッセージのパターンと比較します。一致するものが見つかると、メッセージパターンが TT_QUEUE
または TT_START
を指定している場合には、ToolTalk サービスは ptype と待ち行列を指定するメッセージ、または開始オプションを指定するメッセージに、レコード
(「約束監視」と呼ばれる) を付加します。
手順オブザーバへのディスパッチ
ToolTalk サービスは、メッセージのクラス属性、操作属性、および引数属性を、すべての ptypes のすべての Observe メッセージのパターンと比較します。一致するものが見つかると、シグニチャが TT_QUEUE
または TT_START
を指定している場合には、ToolTalk サービスは ptype と待ち行列を指定するメッセージ、または開始オプションを指定するメッセージに、約束監視のレコードを付加します。
ハンドラへの配信
実行中のプロセスがメッセージに一致した登録済みのハンドラパターンを持っている場合、ToolTalk サービスはメッセージをそのプロセスに配信します。それ以外の場合、ToolTalk サービスは、処置 (待ち行列または開始) オプションに従います。
ハンドラ情報に一致する動的パターンを複数のプロセスが登録している場合は、より限定的なパターン (ワイルドカード以外に一致するものの数を数えることによって判定する) が優先されます。2 つのパターンが同時に限定的である場合は、ハンドラが任意に選択します。
オブザーバへの配信
ToolTalk サービスは、実行中のプロセスのうち、メッセージに一致するオブザーバパターンを登録したすべてのプロセスにメッセージを渡します。ToolTalk サービスは、配信のたびにオブザーバの ptype について約束監視の完了状態を検査します。このプロセスが終わった時点で未完了の約束監視がある場合、ToolTalk サービスは、その約束に指定されている処置 (待ち行列または開始) オプションに従います。
この例では、ToolTalk サービスに FinnogaCalc という架空のスプレッドシートアプリケーションを統合します。
FinnogaCalc は ToolTalk サービスを起動し、FinnogaCalc という ptype を宣言してデフォルトのセッションに参加することによって ToolTalk へ登録します。
FinnogaCalc は、hatsize.wks ワークシートをロードし、ワークシートファイルに結合することによって、ワークシートを監視することを ToolTalk サービスに通知します。
第 2 のインスタンスの FinnogaCalc (FinnogaCalc2 と呼びます) が起動し、ワークシート wardrobe.wks をロードし、同じ方法で ToolTalk に登録します。
hatsize.wks のセル B2 の値を、wardrobe.wks のセル C14 に代入します。
FinnogaCalc2 は、FinnogaCalc が FinnogaCalc2 に値を送信できるように ToolTalk 関数を呼び出して、セル C14 のオブジェクト仕様を作成します。このオブジェクトは、objid によって識別されます。
その後 FinnogaCalc2 は、FinnogaCalc にその objid を (たとえばクリップボードを介して) 指示します。
FinnogaCalc は、この objid によって識別されるオブジェクトにセル B2 を表示し、値を持つメッセージを送信することを記憶します。
ToolTalk はメッセージの経路を指定します。ToolTalk サービスは、メッセージを配信するために次のことを行います。
objid に関連付けられている仕様を検査して、objid の型が FinnogaCalc_cell であることと、対応するオブジェクトが wardrobe.wks ファイルの中にあることを確認します。
FinnogaCalc_cell について otype
の定義を参照します。ToolTalk サービスは otype から、ptype である FinnogaCalc
のプロセスがこのメッセージを監視することと、メッセージの配信範囲が TT_FILE
であることを判定します。
メッセージを登録済みのパターンと照合して、適切なファイルを監視しているプロセスのうち、この ptype を持つすべてのプロセスを検索します。FinnogaCalc2 は一致しますが、FinnogaCalc は一致しません。
FinnogaCalc2 にメッセージを配信します。
FinnogaCalc2 は、セル C14 に対応するオブジェクトがメッセージに入っていることを認識します。FinnogaCalc2 は、wardrobe.wks の値を更新し、新しい値を表示します。