Menerapkan Pipa Output di Server

Untuk mulai menerima data dari server, klien memanggil salah satu prosedur jarak jauh server. Prosedur ini harus berulang kali memanggil prosedur pendorongan di stub server. Pengkompilasi MIDL menggunakan file IDL aplikasi untuk menghasilkan prosedur pendorongan server secara otomatis.

Rutinitas server jarak jauh harus mengisi buffer pipa output dengan data sebelum memanggil prosedur pendorongan. Setiap kali program server memanggil prosedur pendorongan dalam stub-nya, prosedur pendorongan mencekam data dan mengirimkannya ke klien. Perulangan berlanjut sampai server mengirim buffer dengan panjang nol.

Contoh berikut berasal dari program Pipedemo yang terkandung dalam sampel yang disertakan dengan Windows SDK. Ini menggambarkan prosedur server jarak jauh yang menggunakan pipa untuk mendorong data dari server ke klien.

void OutPipe(LONG_PIPE *outputPipe )
{
    long *outputPipeData;
    ulong index = 0;
    ulong elementsToSend = PIPE_TRANSFER_SIZE;
 
    /* Allocate memory for the data to be passed back in the pipe */
    outputPipeData = (long *)malloc( sizeof(long) * PIPE_SIZE );
    
    while(elementsToSend >0) /* Loop to send pipe data elements */
    {
        if (index >= PIPE_SIZE)
            elementsToSend = 0;
        else
        {
            if ( (index + PIPE_TRANSFER_SIZE) > PIPE_SIZE )
                elementsToSend = PIPE_SIZE - index;
            else
                elementsToSend = PIPE_TRANSFER_SIZE;
        }
                    
        outputPipe->push( outputPipe->state,
                          &(outputPipeData[index]),
                          elementsToSend ); 
        index += elementsToSend;
 
    } //end while
 
    free((void *)outputPipeData);
 
}

Pipa

/Oi