アプリケーションは、ToolTalk メッセージを作成、送信、または受信することによって、他のアプリケーションと通信します。送信側は、メッセージを作成、書き込み、または送信します。ToolTalk サービスは受信側を判別し、そのメッセージを受信側に配信します。受信側はメッセージを検出し、メッセージ内の情報を検査してから、メッセージを破棄するか、操作を実行してその結果を応答します。
ToolTalk メッセージの構造は簡単で、アドレス、サブジェクト、および配信情報を含んでいます。ToolTalk メッセージを送信するために、アプリケーションは空のメッセージを取得し、メッセージ属性を書き込んだ後、メッセージを送信します。送信を行うアプリケーションは、次の情報を提供する必要があります。
メッセージが通知か、要求か、提供物なのか (すなわち受信側がメッセージに応答するかどうか)
受信側と送信側は、どのような処理対象を共有しているか (たとえば、受信側は、特定のユーザーセッションで実行されているか、または特定のファイルを処理の対象としているか)
送信側アプリケーションは、メッセージ配信の範囲を限定するために、メッセージ内にさらに情報を指定できます。
ToolTalk の重要な特徴は、送信側が受信側について何も知らなくてかまわないということです。これは、メッセージを受信したいアプリケーションの方が、受け取りたいメッセージがどのようなものかを明示的に示すからです。メッセージの型に関する情報は、「メッセージパターン」という形で ToolTalk サービスに登録されます。
アプリケーションはインストール時または実行時に、メッセージパターンを ToolTalk サービスに対して指定します。メッセージパターンは、メッセージと同様に作成します。つまり、どちらの場合も同種の情報を使用します。アプリケーションは受信したいそれぞれの型のメッセージについて、空のメッセージパターンを取得し、属性を書き込み、そのパターンを ToolTalk サービスに登録します。これらのメッセージパターンは通常、アプリケーションが相互に合意しているメッセージプロトコルと一致します。アプリケーションは、個々の使用に応じてさらにパターンを追加できます。
ToolTalk サービスは、送信側アプリケーションからメッセージを受信すると、メッセージ内の情報と登録されているパターンとを比較します。一致するものが見つかると、ToolTalk サービスは、パターンがメッセージと一致するすべての受信側アプリケーションにメッセージのコピーを配信します。
アプリケーションは、受信したいメッセージを記述したパターンごとに、メッセージを「処理」または「監視」できるかを宣言しています。多数のアプリケーションがメッセージを監視できますが、メッセージを処理できるアプリケーションは 1 つだけです。これは、要求された操作が確実に一度だけ行われるようにするためです。ToolTalk サービスが、メッセージを処理するハンドラを見つけ出せなかった場合は、そのメッセージを送信側アプリケーションに返し、配信が失敗したことを示します。
ToolTalk サービスは、メッセージを特定のプロセスに配信する必要があると判断すると、メッセージのコピーを作成し、受信待ちメッセージがあることをそのプロセスに通知します。受信側アプリケーションが実行中でない場合は、ToolTalk サービスは、アプリケーション起動方法に関する指示 (インストール時にアプリケーションが指定したもの) を検索します。
プロセスは、メッセージを検索し、その内容を検査します。
操作が完了したという情報がメッセージに含まれている場合は、プロセスは、その情報を読み取り、メッセージを破棄します。
操作の実行要求が含まれている場合は、プロセスはその操作を実行し、元のメッセージへの応答という形で操作の結果を返します。応答が返されると、プロセスは元のメッセージを破棄します。