サーバーへの入力パイプの実装
サーバーへのデータの送信を開始するために、クライアントはサーバーのいずれかのリモート プロシージャを呼び出します。 このプロシージャは、サーバーのスタブでプル プロシージャを繰り返し呼び出す必要があります。 MIDL コンパイラは、アプリケーションの IDL ファイルを使用して、サーバーのプル プロシージャを自動的に生成します。
サーバー・プログラムがそのスタブでプル・プロシージャーを呼び出すたびに、プル・プロシージャーはクライアントからデータのブロックを受け取ります。 サーバーのバッファーにデータのマーシャリングを解除します。 サーバーのリモート プロシージャは、必要な方法でこのデータを処理できます。 ループは、サーバーが長さが 0 のバッファーを受け取るまで続行されます。
次の例は、プラットフォーム ソフトウェア開発キット (SDK) に付属するサンプルに含まれる Pipedemo プログラムの例です。 パイプを使用してクライアントからサーバーにデータをプルするリモート サーバープロシージャを示します。
//file: server.c (fragment)
#include uc_server.c
#define PIPE_TRANSFER_SIZE 100 /* Transfer 100 pipe elements at one time */
void InPipe(LONG_PIPE long_pipe )
{
long local_pipe_buf[PIPE_TRANSFER_SIZE];
ulong actual_transfer_count = PIPE_TRANSFER_SIZE;
while(actual_transfer_count > 0) /* Loop to get all
the pipe data elements */
{
long_pipe.pull( long_pipe.state,
local_pipe_buf,
PIPE_TRANSFER_SIZE,
&actual_transfer_count);
/* process the elements */
} // end while
} //end InPipe