サーバーへの入力パイプの実装

サーバーへのデータの送信を開始するために、クライアントはサーバーのいずれかのリモート プロシージャを呼び出します。 このプロシージャは、サーバーのスタブでプル プロシージャを繰り返し呼び出す必要があります。 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