C アプリケーションでは、メッセージ・リスナー関数を使用してメッセージを非同期に受信し、例外リスナー関数を使用して接続の問題に関する通知を非同期に受信します。
メッセージを非同期に受信するには、C アプリケーションがメッセージ・リスナー関数とコンテキスト・データを 1 つ以上のメッセージ・コンシューマーに 登録する必要があります。アプリケーションではこのために、 メッセージ・コンシューマーごとに xmsMsgConsumerSetMessageListener() 関数を呼び出し、メッセージ・リスナー関数とコンテキスト・データを指すポインターをパラメーターとして渡します。
メッセージ・リスナー関数は、ユーザー作成のコールバック関数です。 メッセージ・コンシューマーのメッセージが着信すると、XMS はメッセージを配信するメッセージ・リスナー関数を呼び出し、コンテキスト・データを指すポインターとメッセージのハンドルをそれぞれ個別のパラメーターとして渡します。
コンテキスト・データの形式と内容はアプリケーションにより定義されます。データ自体は、アプリケーションが所有するメモリーを占有します。例えば、コンテキスト・データがヒープに割り当てられている構造体であることが あります。コンテキスト・データには、メッセージ・リスナー関数がメッセージの処理時に参照する必要がある情報がすべて 含まれています。XMS ではコンテキスト・データのコピーは作成されません。このため、XMS がメッセージ・リスナー関数を呼び出した時点でコンテキスト・データが使用可能であることをアプリケーションが確認する必要があります。
非同期に受信したメッセージが使用していたリソースを解放する操作は、アプリケーションにより実行される必要がある点に注意してください。XMS はこれらのリソースを解放しません。
メッセージ・コンシューマーへのメッセージの非同期配信を停止するには、アプリケーションが xmsMsgConsumerSetMessageListener() 関数を再度呼び出し、メッセージ・リスナー関数を指すポインターではなく NULL ポインターをパラメーターとして渡します。
既存のメッセージ・リスナー関数の登録を取り消さずに、新規メッセージ・リスナー関数とコンテキスト・データをメッセージ・コンシューマーに登録できます。既存のメッセージ・リスナー関数の実行中に新規メッセージ・リスナー関数を登録すると、アクティブなメッセージ・リスナー関数が通常の方法で完了し、後続のメッセージはすべて新規メッセージ・リスナー関数の呼び出しにより処理されます。トランザクションの進行中にメッセージ・リスナー関数が変更されると、新規メッセージ・リスナー関数の呼び出しによりトランザクションが完了します。
メッセージ・リスナー関数 (シグニチャーを含む) についての詳細は、MessageListenerを参照してください。
例外リスナー関数の使用法は、基本的にメッセージ・リスナー関数の使用法と似ています。
C アプリケーションは例外リスナー関数を接続に登録するため、xmsConnSetExceptionListener() 関数を呼び出し、例外リスナー関数とコンテキスト・データを指すポインターをパラメーターとして渡します。例外リスナー関数は、ユーザー作成のコールバック関数です。 XMS が接続の問題を検出すると、XMS は例外リスナー関数を呼び出し、コンテキスト・データを指すポインターとエラー・ブロックのハンドルをそれぞれ個別のパラメーターとして渡します。
コンテキスト・データには、例外リスナー関数がエラー・ブロック処理時に参照する必要がある情報がすべて含まれています。その他の点では、例外リスナー関数でのコンテキスト・データの使用法は、メッセージ・リスナー関数でのコンテキスト・データの使用法と同じです。
例外リスナー関数 (シグニチャーを含む) についての詳細は、MessageListenerを参照してください。
このように受信したエラー・ブロックが使用していたリソースを解放する操作はアプリケーションにより実行される必要がある点に注意してください。XMS はこれらのリソースを解放しません。
接続の問題の非同期レポートを停止するには、アプリケーションが xmsConnSetExceptionListener() 関数を再度呼び出し、例外リスナーを指すポインターではなく NULL ポインターをパラメーターとして渡します。