次の方法で共有


受信、メッセージ

次の図は、ダイナミック アクセス モジュール (DMOD) からメッセージを受信する過程を示しています。

ルーティング手順を使用してメッセージを受信する方法を示す画像。
ルーティング手順を使用したメッセージの受信

DMOD の初期化後、3270 エミュレーターは sepdrout を呼び出してルーティング手順を登録します。 メッセージを受信すると、DMOD が 3270 エミュレーターのルーティング手順を呼び出し、メッセージを処理できるようになります。

この方法では、DMOD スレッドと 3270 エミュレーター スレッドの間にコンテキストの切り替えは発生しません。 ただし、ルーティング手順は、DMOD に制御を返す必要があります。 たとえば、キーボード入力の待機を一時停止することはできません。

アプリケーションは、受信したメッセージがこのアプリケーションと他のアプリケーションのどちら用のメッセージかを判断する必要があります。 メッセージがこのアプリケーション用ではない場合、ルーティング手順は元に戻る必要があり、それによってメッセージが処理されなかったことを示します。 アプリケーションがメッセージを処理する場合は、処理が終了した時点でバッファーを解放する必要があります。

場合によっては、ルーティング手順でメッセージを最後まで処理できます。 別の方法としては、メッセージをアプリケーション キューに配置したうえで、アプリケーション セマフォをクリアするというルーティング手順もあります。 この場合、アプリケーションは後でメッセージを処理できます。

パフォーマンスをさらに改善するには、メッセージが最後まで処理されるのを待機するのではなく、メッセージが受信されたときに、ルーティング手順から Status-Resource メッセージを送信します (ローカル ノードにクレジットを返して、さらにデータを送信できるようにする)。 この使用方法については、「サンプルコード: 初期化とルーティング手順」で説明します。 クレジットおよびフロー制御の詳細については、「ペーシングとチャンク」を参照してください。

メッセージを受信した後、アプリケーションはメッセージを受信したバッファーを処理する機能を担います。 アプリケーションは、メッセージを送信するためにバッファーを再利用する (sbpusend を使用) か、解放する (sepdburl を使用) 必要があります。 再利用するバッファーに、送信するメッセージの正しい数の要素が含まれている場合、アプリケーションは追加の要素を取得する (sbpibegt を使用) か、既存の要素 (sbpiberlを使用) を解放できます。 この場合、アプリケーションでは、バッファー ヘッダーの numelts フィールドが正しい数の要素を示していることを確認する必要があります。