Implementazione di pipe di input nel server
Per iniziare a inviare dati a un server, un client chiama una delle procedure remote del server. Questa procedura deve chiamare ripetutamente la procedura pull nello stub del server. Il compilatore MIDL usa il file IDL dell'applicazione per generare automaticamente la routine pull del server.
Ogni volta che il programma server richiama la routine pull nel relativo stub, la procedura pull riceve blocchi di dati dal client. Unmarshal i dati nel buffer del server. La procedura remota del server può quindi elaborare questi dati in qualsiasi modo. Il ciclo continua fino a quando il server riceve un buffer di lunghezza zero.
L'esempio seguente è dal programma Pipedemo contenuto negli esempi che provengono da Platform Software Development Kit (SDK). Illustra una routine del server remoto che usa una pipe per eseguire il pull dei dati dal client al server.
//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