Implementieren von Eingabepipes auf dem Server

Um mit dem Senden von Daten an einen Server zu beginnen, ruft ein Client eine der Remoteprozeduren des Servers auf. Diese Prozedur muss die Pullprozedur im Stub des Servers wiederholt aufrufen. Der MIDL-Compiler verwendet die IDL-Datei der Anwendung, um die Pullprozedur des Servers automatisch zu generieren.

Jedes Mal, wenn das Serverprogramm die Pullprozedur in seinem Stub aufruft, empfängt die Pullprozedur Datenblöcke vom Client. Die Daten werden im Puffer des Servers zusammengeführt. Die Remoteprozedur des Servers kann diese Daten dann in beliebiger Weise verarbeiten. Die Schleife wird fortgesetzt, bis der Server einen Puffer der Länge null erhält.

Das folgende Beispiel stammt aus dem Pipedemo-Programm, das in den Beispielen enthalten ist, die mit dem Platform Software Development Kit (SDK) geliefert werden. Es veranschaulicht eine Remoteserverprozedur, die eine Pipe zum Pullen von Daten vom Client auf den Server verwendet.

//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