ToolTalk ユーザーズガイド

第 3 章 メッセージパターン

この章では、メッセージパターン情報を ToolTalk サービスに提供する方法について説明します。ToolTalk サービスは、メッセージパターンを使用してメッセージの受信側を判定します。メッセージを受信した後で、ToolTalk サービスは、メッセージを現在のメッセージパターンのすべてと比較して一致するパターンを見つけます。パターンが一致すると、メッセージは、メッセージパターンを登録したアプリケーションに配信されます。

動的、静的、またはその両方を使用して、メッセージパターン情報を ToolTalk サービスに提供できます。選択できる方法は、受信したいメッセージの型によって異なります。

ToolTalk サービスにメッセージパターンを提供する選択方法に関係なく、現在の各セッションおよびファイル情報によってこれらのパターンを更新すると、処理の対象とするセッションまたはファイルを参照する、すべてのメッセージを受信します。

メッセージパターンの属性

メッセージパターンの属性は、ユーザーが受信したいメッセージの型を指定します。1 つの値しか設定されない属性があっても、1 つのパターンに追加する属性のほとんどに、複数の値を設定できます。

メッセージパターンに設定できる属性の完全なリストを表 3-1 に示します。

表 3-1 ToolTalk メッセージパターンの属性

パターン属性 

値 

説明 

カテゴリ 

TT_OBSERVE, TT_HANDLE, TT_HANDLE_PUSH, TT_HANDLE_ROTATE

メッセージに表示されている操作を実行するか、メッセージの監視だけを行うかを宣言する 

配信範囲 

TT_SESSION, TT_FILE, TT_FILE_IN_SESSION, TT_BOTH

セッションおよびファイル、またはそのどちらかに関するメッセージを対象としていることを宣言する。sessid およびファイル名を更新するためにメッセージパターンを登録した後、セッションまたはファイルを結合する 

引数 

引数または結果 

処理の対象とする操作の定位置引数を宣言する 

コンテキスト 

<名前, 値> 

処理の対象とする操作のキーワードまたは非定位置引数を宣言する 

クラス 

TT_NOTICE, TT_REQUEST, TT_OFFER

通知、要求、提供、またはそれらすべてを受信するかどうかを宣言する 

ファイル 

char *pathname

処理の対象とするファイルを宣言する。配信範囲がファイルに関係しない場合、このパターン属性は無効である 

オブジェクト 

char *objid

処理の対象とするオブジェクトを宣言する 

操作 

char *opname

処理の対象とする操作を宣言する 

otype 

char *otype

処理の対象とするオブジェクトの型を宣言する 

アドレス 

TT_PROCEDURE, TT_OBJECT, TT_HANDLER, TT_OTYPE

処理の対象とするアドレスの型を宣言する 

処置 

TT_DISCARD, TT_QUEUE, TT_START, TT_START+TT_QUEUE

インスタンスを実行中でなければ、アプリケーションへのメッセージの処理方法を ToolTalk サービスに指示する 

送信側 

char *procid

処理の対象とする送信側を宣言する 

sender_ptype 

char *ptype

処理の対象とする送信側プロセスの型を宣言する 

セッション 

char *sessid

処理の対象とするセッションを宣言する 

状態 

TT_CREATED, TT_SENT, TT_HANDLED, TT_FAILED, TT_QUEUED, TT_STARTED, TT_REJECTED, TT_RETURNED, TT_ACCEPTED, TT_ABSTAINED

処理の対象とするメッセージの状態を宣言する 

少なくとも指定しなければならないすべてのメッセージパターンは次のとおりです。

ToolTalk サービスは、次のようにメッセージ属性をパターン属性と比較します。

配信範囲属性

メッセージパターンに次のような配信範囲の型を指定できます。

  1. セッションだけの配信範囲

  2. ファイルだけの配信範囲

  3. 特定のセッションのファイルだけの配信範囲

  4. ファイルおよびセッションのどちらか、または両方への配信範囲


注 -

ファイルの配信範囲指定機能を使用できるのは、NFS ファイルシステムと UFS ファイルシステムだけです。たとえば、tmpfs ファイルシステムなどの他の型のファイルシステムでは、ファイルへの配信範囲は指定できません。


セッションだけの配信範囲指定

TT_SESSION 型は、セッションだけを配信範囲とします。静的セッション配信範囲指定のパターンは、明示的な tt_session_join 呼び出しに配信範囲の値を設定するように要求します。動的セッション配信範囲指定のパターンは、tt_session_join 呼び出しまたは tt_pattern_session_add 呼び出しのどちらかによって設定できます。


注 -

これらの呼び出しが指定するセッションは、デフォルトセッションでなければなりません。


例 3-1 は、静的セッション配信範囲指定のパターンを示します。例 3-2 は、動的セッション配信範囲指定のパターンを示します。


例 3-1 静的セッション配信範囲指定のパターン

Obtain procid 

tt_open(); 

Ptype is scoped to session 

tt_ptype_declare(ptype); 

Join session 

tt_session_join(tt_default_session()); 



例 3-2 ファイル属性による動的セッション配信範囲指定のパターン

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat, TT_SESSION); 

Add session to pattern 

tt_pattern_session_add(tt_default_session()); 

Register pattern 

tt_pattern_register(pat); 


ファイルだけの配信範囲指定

TT_FILE 型は、ファイルだけを配信範囲とします。例 3-3 は、静的ファイル配信範囲指定のパターンを示します。例 3-4 は、動的ファイル配信範囲指定のパターンを示します。


例 3-3 静的ファイル配信範囲指定のパターン

Obtain procid 

tt_open(); 

Ptype is scoped to file 

tt_ptype_declare(ptype); 

Join file 

tt_file_join(file); 



例 3-4 動的ファイル配信範囲指定のパターン

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat, TT_FILE); 

Add file to pattern 

tt_pattern_file_add (pat, file); 

Register pattern 

tt_pattern_register(pat); 


セッション内のファイルへの配信範囲指定

TT_FILE_IN_SESSION 型は、指定セッション内の指定ファイルだけを配信範囲とします。この配信範囲設定によってパターンは、ファイルとセッションの両方を配信範囲とするメッセージだけに一致します。例 3-5 では、セッションを追加してからパターンを登録します。


例 3-5 TT_FILE_IN_SESSION 配信範囲指定のパターンへのセッション追加

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat,TT_FILE_IN_SESSION); 

Add file to pattern 

tt_pattern_file_add(pat, file); 

Add session to pattern 

tt_pattern_session_add(pat, tt_default_session()); 

Register pattern 

tt_pattern_register(pat); 


例 3-6 は、パターンを登録してからセッションを結合します。


例 3-6 TT_FILE_IN_SESSION 配信範囲指定のパターンのセッションを設定するためのセッション結合

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat, TT_FILE_IN_SESSION); 

Add file to pattern 

tt_pattern_file_add(pat, file); 

Register pattern 

tt_pattern_register(pat); 

Join session 

tt_session_join(tt_default_session()); 


例 3-7 は、静的パターンの配信範囲の値を設定します。


例 3-7 TT_FILE_IN_SESSION 静的パターンの配信範囲値の設定

Obtain procid 

tt_open(); 

Declare Ptype 

Tt_ptype_declare(ptype); 

Join File 

tt_file_join(file); 

Join session 

tt_session_join(tt_default_session()); 


ファイル、セッション、または両方への配信範囲指定

TT_BOTH 配信範囲指定のパターンは、ファイル、セッション、またはその両方へ配信範囲指定したメッセージと一致します。しかし、この配信範囲指定を使用する場合は、tt_file_join 呼び出しを明示的に行う必要があります。呼び出しを行わないと、ToolTalk サービスは登録されたパターンのファイルとセッションの両方に配信範囲指定したメッセージだけに一致します。例 3-8例 3-9 は、この配信範囲の使用例を示します。


例 3-8 TT_BOTH 配信範囲を使用する動的パターン

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat, TT_BOTH); 

Add session to pattern 

tt_pattern_session_add(pat,tt_default_session()); 

Add file to pattern 

tt_pattern_file_add (pat, file); 

Register pattern 

tt_pattern_register(pat); 



例 3-9 TT_BOTH 配信範囲を使用する静的パターン

Obtain procid 

tt_open(); 

Declare Ptype 

Tt_ptype_declare(ptype); 

Join file 

tt_file_join(file) 

Join session 

tt_session_join(tt_default_session()); 


配信範囲指定したパターンへのファイルの追加

同じファイル属性を持つ TT_SESSION 配信範囲指定のメッセージと TT_SESSION 配信範囲指定のパターンを一致させるために、tt_pattern_file_add 呼び出しによって、ファイル属性を TT_SESSION 配信範囲指定のパターンに追加できます (詳細は、例 3-10 を参照してください)。


注 -

ファイル属性の値は、パターンの配信範囲に影響しません。



例 3-10 2 つのファイル属性のセッション配信範囲指定したパターンへの追加

Obtain procid 

tt_open(); 

Create pattern 

Tt_pattern pat = tt_create_pattern(); 

Add scope to pattern 

tt_pattern_scope_add(pat, TT_SESSION); 

Add session to pattern 

tt_pattern_session_add(tt_default_session()); 

Add first file attribute to pattern 

tt_pattern_file_add(pat, file1); 

Add second file attribute to pattern 

tt_pattern_file_add(pat, file2); 

Register pattern 

tt_pattern_register(pat); 


コンテキスト属性

ToolTalk の「コンテキスト」は、メッセージとパターンの両方に明示的に含まれる一連の <名前, 値> のペアです。ToolTalk コンテキストによって、詳細な照合処理を実行できます。

コンテキストを使用して、任意のペアを ToolTalk メッセージとパターンに関連付けることができます。また、一連のメッセージの受信側を制限できます。ToolTalk コンテキスト属性が提供する、制限付きパターン照合の一般的な使用方法は、サブセッションを作成することです。たとえば、2 つの異なるプログラムは、各プログラムのために動作するブラウザ、エディタ、デバッガ、構成マネージャなどのツールによって同時にデバッグできます。各ツールセットのメッセージとパターンのコンテキストスロットは、異なる値を持っています。これらの値の正常な ToolTalk パターンの照合は、2 つのサブセッションを別々に保持します。

ToolTalk コンテキスト属性が提供する、制限付きパターン照合の別の使用方法は、環境変数とコマンド行引数の情報を、ToolTalk サービスが起動するツールに提供することです。

パターン引数の属性

ToolTalk のパターン引数には、文字列、バイナリデータ、および整数値があり、受信メッセージと照合をとるのに ToolTalk サービスが使用します。

引数が配置されたパラメタであるのに対して、コンテキストは名前付きのパラメタですので、引数はコンテキストによって異なります。メッセージに設定されているコンテキストの順番で、受信および送信メッセージ内の順番が決まります。つまり、パターンで設定されている引数の順番とタイプに一致します。引数は位置が重要な意味を持つため、受信メッセージの最初の引数ではない引数のマッチングをとりたい場合は、パターンの中間引数としての「ワイルドカード」引数を追加する必要があります。ワイルドカード引数は、「ALL」の vtype で NULL 値を持ちます。

パ*ターン引数を使用して、自分の引数 (整数、バイナリデータ、または ASCII 文字列) のタイプに一致する API 呼び出しを追加します。特に、tt_pattern_iarg_add() の NULL のワイルドカード値を使ってパターン引数を加えることはできないので注意してください。NULL つまり 0 は、有効な整数の引数であるためです。ワイルドカードの引数を加えるには、tt_pattern_arg_add() を使用してください。

処置属性

ユーザーアプリケーションのインスタンスが動作していない場合、処置属性で、そのアプリケーションに送られたメッセージの処理方法を ToolTalk サービスに指示します。

パターンの静的型定義で指定した処置の値がデフォルトになりますが、メッセージの処置でハンドラの ptype を指定すると、このデフォルトは上書きされます。たとえば、「Display」というメッセージシグニチャの入った「UWriteIt」という ptype に対して、メッセージの処置で静的型定義を指定するとします。このメッセージシグニチャは、そのパターンのどの静的シグニチャとも一致しないため、ToolTalk サービスはそのメッセージ中に設定された処置に従います。たとえば、メッセージの処置が TT_START で、「UWriteIt」という ptype で開始文字列を指定すると、ToolTalk サービスはアプリケーションのインスタンスが 1 つも動作していない場合、アプリケーションのインスタンスを起動します。