アプリケーションは、アプリケーションを実行しているプロセスがない場合でも、潜在的なメッセージの受信者であると考えられます。そのために、プロセス型 (ptype) ファイルにアプリケーションの起動方法に関するメッセージパターンと指示を提供します。これらの指示は、メッセージがアプリケーションを利用可能だがアプリケーションが起動していない場合、次の処置の 1 つを行うよう ToolTalk サービスに指示します。
アプリケーションを起動し、メッセージを配信する。
アプリケーションが起動するまで、メッセージを待ち行列に入れる。
メッセージを破棄する。
ToolTalk サービスが情報を利用できるようにするため、アプリケーションのインストール時に、ToolTalk 型コンパイラの tt_type_comp によって ptype ファイルをコンパイルします。
アプリケーションが ToolTalk サービスに ptype を登録すると、ptype に表示されたメッセージパターンも自動的に登録されます。
ptype は、アプリケーションが起動していないときに ToolTalk サービスが使用する、アプリケーション情報を提供します。この情報は、必要に応じてプロセスを起動する場合のほか、メッセージを受信する場合またはプロセスが開始するまでメッセージを待ち行列に入れる場合に使用されます。
ptype は、プロセス型識別子 (ptid) で始まります。ptid の後には、次の項目が続きます。
オプションの開始文字 - ToolTalk サービスは、必要に応じてこのコマンドを実行し、プログラムを実行するプロセスを起動します。
シグニチャ - プログラムが受信対象とする、TT_PROCEDURE
にアドレス指定したメッセージを記述します。監視対象のメッセージは、処理対象のメッセージとは別に記述します。
「シグニチャ」は、プログラムが受信対象とするメッセージについて記述します。シグニチャは、矢印 (=>) によって 2 つの部分に分けられます。シグニチャの前半部分は、照合する属性値を指定します。シグニチャに指定する属性値の数が増えるほど、シグニチャが一致するメッセージの数は少なくなります。シグニチャの後半部分は、シグニチャの前半部分に一致したメッセージに ToolTalk サービスがコピーする受信側の値を指定します。
ptype のシグニチャは、処置および操作番号 (opnum) の値を持つことができます。ToolTalk サービスは、処置の値 (開始、待ち行列、またはデフォルトの破棄) を使用し、プログラムを実行しているプロセスがない場合に、シグニチャに一致したメッセージに対する処理を決定します。opnum 値は、メッセージの受信側にとって便利です。2 つのシグニチャの操作名が同じで引数が異なる場合は、異なる opnum によって着信メッセージを簡単に識別できます。
次のコード例は、ptype ファイルを示しています。
次に ptype ファイルの構文を示します。
ptid - プロセス型識別子 (ptid) は、プロセスの型を識別します。ptid は、導入システムごとに一意でなければなりません。この識別子はインストール後は変更できません。したがって、選択する個々の名前は一意でなければなりません。たとえば、Sun_EditDemo のように、製品または会社の商標名を使用できます。ptid には、32 文字以内という制限があり、予約済み識別子 (ptype、otype、start、opnum、queue、file、session、observe、または handle) は使用できません。
start - プロセスの起動文字列。ToolTalk サービスが、プロセスを起動する必要がある場合は、シェルとして使われるコマンド /bin/sh を実行します。
コマンドを実行する前に、ToolTalk サービスは、アプリケーションを起動したメッセージのファイル属性値を使って、TT_FILE を環境変数として定義します。このコマンドは、アプリケーションを起動したメッセージ送信側の環境ではなく、ttsession の環境内で実行します。したがって、コンテキスト情報がある場合、メッセージ引数またはコンテキストによって渡される必要があります。
scope - このパターン属性は、メッセージ内の配信範囲属性と照合されます。
op - 操作名。この名前は、メッセージ内の操作属性と照合されます。
ptype および otype の両方にメッセージシグニチャを指定する場合は、それぞれに固有の操作名を使用してください。たとえば、ptype と otype の両方に表示操作を指定することはできません。
args - 操作のための引数。args リストが void の場合、シグニチャは引数のないメッセージだけに一致します。args リストが空 (つまり ()) の場合は、シグニチャは引数とは無関係に一致します。
contextdcl - コンテキスト名。この名前の付いたコンテキストを持つパターンがシグニチャから生成される場合、パターンは空の値リストを持ちます。
start - psignature がメッセージに一致しても、この ptype を持つ実行中のプロセスの中に、メッセージに一致したパターンを持つものがない場合は、この ptype のプロセスを起動します。
queue - psignature がメッセージに一致しても、この ptype を持つ実行中のプロセスの中にメッセージに一致したパターンを持つものがない場合は、この ptype のプロセスがメッセージに一致したパターンを登録するまでメッセージを待ち行列に入れます。
opnum - 指定された数をメッセージの opnum 属性に書き込み、メッセージと一致したシグニチャを識別できるようにします。
メッセージがシグニチャと一致するとき、シグニチャの opnum がメッセージに組み込まれます。これでアプリケーションは、tt_message_opnum 呼び出しによって opnum を検索できます。シグニチャごとに固有の opnum を指定すると、どのシグニチャがメッセージと一致したかすぐに判定できます。
tt_ptype_opnum_callback_add 呼び出しを使用すると、opnum にコールバックルーチンを接続できます。メッセージが一致すると、ToolTalk サービスはその opnum に接続されたコールバックをすべて調べ、それらを起動します。
Sun_EditDemo_opnums.h ファイルは、edit.c が使用するすべての opnum のシンボリック定義を定義します。これにより、edit.types ファイルと edit.c ファイルは、同じ定義を共有できます。
ToolTalk サービスにツールを自動的に起動させる ptype 宣言の簡単な例を次に示します。これは、表示、編集、および構成対象のメッセージを受信し、そのメッセージを処理できるツールのインスタンスが 1 つも動作していない場合は、/home/toone/tools/mytest を起動し、そのメッセージを配信するというコード例です。
この例を実行すると、ToolTalk サービスはハンドラを無限に検索し続けます。