ToolTalk サービスは、メッセージを作成し完了するために次の 3 通りの方法を用意しています。
汎用関数
tt_message_create ( )
プロセス指向の通知関数と要求関数
tt_pnotice_create ( )
tt_prequest_create ( )
オブジェクト指向の通知関数と要求関数
tt_onotice_create ( )
tt_orequest_create ( )
プロセス指向およびオブジェクト指向の通知関数と要求関数を使用すると、一般的なメッセージが簡単に作成できます。これらの関数は、機能的には他の tt_message_create ( ) および tt_message_attribute_set ( ) 呼び出しの文字列と同じですが、より簡単に書き込みと読み取りができます。表 8-4 と表 8-5 は、メッセージの作成および完成用に使用する ToolTalk 関数を示しています。
表 8-4 メッセージ作成用の関数
ToolTalk 関数 |
機能 |
---|---|
tt_onotice_create(const char *objid, const char *op) |
オブジェクト指向の通知を作成する |
tt_orequest_create(const char *objid, const char *op) |
オブジェクト指向の要求を作成する |
tt_pnotice_create(Tt_scope scope, const char *op) |
プロセス指向の通知を作成する |
tt_prequest_create(Tt_scope scope, const char *op) |
プロセス指向の要求を作成する |
tt_message_create(void) |
メッセージを作成する。この関数は、メッセージ作成用の ToolTalk 汎用関数である |
すべての作成用関数が返す型は Tt_message です。
ToolTalk 関数 |
機能 |
---|---|
tt_message_address_set(Tt_message m, Tt_address p) |
アドレス指定モードを設定する (たとえば、ポイントツーポイント) |
tt_message_arg_add(Tt_message m, Tt_mode n, const char *vtype, const char *value) |
NULL 終了文字列の引数を追加する |
tt_message_arg_bval_set(Tt_message m, int n, const unsigned char *value, int len) |
引数の値を、指定されたバイト配列に設定する |
tt_message_arg_ival_set(Tt_message m, int n, int value) |
引数の値を、指定された整数に設定する |
tt_message_arg_val_set(Tt_message m, int n, const char *value) |
引数の値を、指定された NULL 終了文字列に設定する |
tt_message_barg_add(Tt_message m, Tt_mode n, const char *vtype, const unsigned char *value, int len) |
バイト配列の引数を追加する |
tt_message_iarg_add(Tt_message m, Tt_mode n, const char *vtype, int value) |
整数の引数を追加する |
tt_message_context_bval(Tt_message m, const char *slotname, unsigned char **value, int *len); |
コンテキストの値を、指定されたバイト配列に取得する |
tt_message_context_ival(Tt_message m, const char *slotname, int *value); |
コンテキストの値を、指定された整数に取得する |
tt_message_context_val(Tt_message m, const char *slotname); |
コンテキストの値を、指定された文字列に取得する |
tt_message_icontext_set(Tt_message m, const char *slotname, int value); |
コンテキストを、指定された整数に設定する |
tt_message_bcontext_set(Tt_message m, const char *slotname, unsigned char *value, int length); |
コンテキストを、指定されたバイト配列に設定する. |
tt_message_context_set(Tt_message m, const char *slotname, const char *value); |
コンテキストを、指定された NULL 終了文字列に設定する |
tt_message_class_set(Tt_message m, Tt_class c) |
メッセージの型 (通知または要求) を設定する |
tt_message_file_set(Tt_message m, const char *file) |
メッセージの配信範囲として指定するファイルを設定する |
tt_message_handler_ptype_set(Tt_message m, const char *ptid) |
メッセージを受信する ptype を設定する |
tt_message_handler_set(Tt_message m, const char *procid) |
メッセージを受信する procid を設定する |
tt_message_object_set(Tt_message m, const char *objid) |
メッセージを受信するオブジェクトを設定する |
tt_message_op_set(Tt_message m, const char *opname) |
メッセージを受信する操作を設定する |
tt_message_otype_set(Tt_message m, const char *otype) |
メッセージを受信するオブジェクト型を設定する |
tt_message_scope_set(Tt_message m, Tt_scope s) |
メッセージを受信する受信側 (ファイルまたはセッション、あるいはその両方) を設定する |
tt_message_sender_ptype_set(Tt_message m, const char *ptid) |
メッセージの送信元であるアプリケーションの ptype を設定する |
tt_message_session_set(Tt_message m, const char *sessid) |
メッセージの配信範囲として指定するセッションを設定する |
tt_message_status_set(Tt_message m, int status) |
メッセージの状態を設定する。この状態は、受信側アプリケーションが参照する |
tt_message_status_string_set(Tt_message m, const char *status_str) |
メッセージの状態を記述するテキストを設定する。このテキストは、受信側アプリケーションが参照する |
tt_message_user_set(Tt_message m, int key, void *v) |
送信側アプリケーションの内部メッセージを設定する。この内部メッセージは、受信側アプリケーションが参照できない隠されたデータである |
tt_message_abstainer(Tt_message m, int n) |
指定したメッセージの n 番目の忌避者の procid を返す |
tt_message_abstainers_count(Tt_message m) |
オファを忌避した、 |
tt_message_accepter(Tt_message m,int n) |
特定のメッセージを受信した n 番目の procid を返す |
tt_message_accepters_count(Tt_message m) |
オファを受信した、 |
tt_message_rejecter(Tt_message m,int n) |
指定したメッセージの n 番目の拒絶者の procid を返す |
tt_message_rejecters_count(Tt_message m)
|
オファを拒絶した、 |
メッセージの完成用に使用するすべての関数が返す型は Tt_status です。
汎用関数 tt_message_create ( ) を使用して、ToolTalk メッセージを作成し完成できます。tt_message_create ( ) を使用してプロセス指向またはオブジェクト指向のメッセージを作成する場合は、tt_message_attribute_set ( ) 呼び出しを使用して属性を設定します。
値または状態を返すメッセージ用には、TT_REQUEST
を使用します。メッセージが処理された場合、メッセージが待ち行列に入れられた場合、または要求を処理するプロセスを起動した場合には通知されます。
イベントの他のプロセスに通知するだけのメッセージ用には、TT_NOTICE
を使用します。
メッセージの受信者としていくつかのタイプを予想して、それらの中の受信者、拒絶者、忌避者の割合を知りたい場合は、TT_OFFER
を使用します。
TT_PROCEDURE
を使用して、これらの引数を使用してこの操作を実行できるすべてのプロセスにメッセージを送信します。このメッセージの操作属性と引数属性を書き込みます。
TT_OTYPE
を使用して、これらの引数を使用してこの操作を実行できるオブジェクト型にメッセージを送信します。このメッセージの
otype 属性、操作属性、および引数属性を書き込みます。
TT_HANDLER
を使用して、特定のプロセスにメッセージを送信します。ハンドラ属性の値を指定します。
通常、1 つのプロセスは一般的な要求を作成し、応答からハンドラ属性を選択し、そのハンドラに追加のメッセージを送信します。ハンドラの正確な procid を指定した場合、ToolTalk サービスはメッセージを直接配信します。この場合、パターン照合は行われず、他のアプリケーションがメッセージを監視できません。このポイントツーポイント (PTP) のメッセージ渡し機能によって、2 つのプロセスがブロードキャストメッセージを渡すことによって認識し合い、明示的な通信を実行できます。
オファは、TT_PROCEDURE
アドレスでのみ送信可能です。それ以外のアドレスで送信しようとすると、TT_ERR_ADDRESS
エラーとなります。
TT_OBJECT
を使用して、これらの引数を使用して操作を実行する特定のオブジェクトにメッセージを送信します。このメッセージのオブジェクト属性、操作属性、および引数属性を書き込みます。
メッセージ配信の配信範囲を書き込みます。受信可能側は、次の値に結合できます。
TT_SESSION
TT_FILE
TT_BOTH
TT_FILE_IN_SESSION
ToolTalk サービスは、配信範囲に応じてデフォルトのセッションまたはファイル、あるいはその両方をメッセージに追加します。
オファは、TT_SESSION
の配信範囲でのみ送信可能です。
作成中の通知または要求について記述した操作を書き込みます。操作名を判定するには、ターゲットとなる受信側の ptype 定義またはメッセージプロトコル定義を参照します。
操作に固有の引数を書き込みます。引数のデータ型に最も適した関数を使用します。
tt_message_arg_add ( )
値がゼロ終了文字列の引数を追加します。
tt_message_barg_add ( )
値がバイト文字列の引数を追加します。
tt_message_iarg_add ( )
値が整数の引数を追加します。
追加する引数ごとに、次の値を指定します (値の型には関係ありません)。
Tt_mode
TT_IN
または TT_INOUT
を指定します。TT_IN
は、送信側が引数を書き込み、ハンドラおよびオブザーバがこの引数を読み取れることを示します。TT_INOUT
は、送信側とハンドラが引数を書き込み、誰でも引数を読み取れることを示します。応答としてハンドラからの引数を必要とする要求を送信する場合は、TT_INOUT
を使用します。
値の型
値の型 (vtype) は、追加する引数のデータ型について説明します。ToolTalk サービスは、登録済みのパターンとメッセージを比較してメッセージの受信側を判定する際に vtype 名を使用します。しかし、メッセージまたはパターンの引数の値を処理する際には vtype を使用しません。
vtype 名は、メッセージの受信側がデータを解釈するのに役立ちます。たとえば、ワードプロセッサがメモリ内のパラグラフを PostScript 表現に変換した場合は、tt_message_arg_add に次の引数を付けて呼び出すことができます。
tt_message_arg_add (m, "PostScript", buf);
この場合 ToolTalk サービスは、ゼロ終了文字列を指す buf を想定し送信します。
同様に、アプリケーションは、ToolTalk メッセージで enum 値 (たとえば、次のような Tt_status の要素) を送信します。
tt_message_iarg_add(m, "Tt_status", (int) TT_OK);
ToolTalk サービスは、値を整数として送信します。ただし、Tt_status という vtype は、値が何を意味するかを受信側に示します。
特に送信側と受信側で特定の vtype 名を定義し、受信側が他の形式で格納された値を検索できないようにしなければなりません。たとえば、整数として格納した値が、文字列として検索されないようにしなければなりません。
プロセス指向の通知と要求は、簡単に作成できます。手続き型の通知または要求について、新しいメッセージオブジェクトのハンドルまたは隠されたポインタを取得するには、tt_pnotice_create 関数または tt_prequest_create 関数を使用します。このハンドルは、以降の呼び出しでメッセージを参照するために使用できます。
tt_pnotice_create または tt_prequest_create を使用してメッセージを作成する場合は、引数として次の 2 つの属性を指定しなければなりません。
配信範囲
メッセージ配信の配信範囲を書き込みます。受信可能側は、次の値に結合できます。
TT_SESSION
TT_FILE
TT_BOTH
TT_FILE_IN_SESSION
ToolTalk サービスは配信範囲に応じて、デフォルトのセッションまたはファイル (あるいはその両方) を書き込みます。
操作
作成中の通知または要求について記述した操作を書き込みます。操作名を判定するには、ターゲットプロセスの ptype 定義またはその他のプロトコル定義を参照します。
操作引数などの他のメッセージ属性を完成するには、tt_message_attribute_set ( ) 呼び出しを使用します。
オブジェクト指向の通知と要求は、簡単に作成できます。オブジェクト指向の通知または要求について、新しいメッセージオブジェクトのハンドルまたは隠されたポインタを取得するには、tt_onotice_create 関数または tt_orequest_create 関数を使用します。このハンドルは、以降の呼び出しでメッセージを参照するために使用できます。
tt_onotice_create または tt_orequest_create を使用してメッセージを作成する場合は、引数として次の 2 つの属性を指定しなければなりません。
Objid
一意のオブジェクト識別子を書き込みます。
操作
作成中の通知または要求について記述した操作を書き込みます。操作名を判定するには、ターゲットプロセスの ptype 定義またはその他のプロトコル定義を参照します。
操作引数などの他のメッセージ属性を完成するには、tt_message_attribute_set ( ) 呼び出しを使用します。