Implementazione di pipe di output nel server

Per iniziare a ricevere dati da un server, un client chiama una delle procedure remote del server. Questa procedura deve chiamare ripetutamente la procedura push nello stub del server. Il compilatore MIDL usa il file IDL dell'applicazione per generare automaticamente la procedura push del server.

La routine del server remoto deve riempire il buffer della pipe di output con i dati prima di chiamare la procedura push. Ogni volta che il programma server richiama la procedura push nel relativo stub, la procedura push esegue il marshalling dei dati e la trasmette al client. Il ciclo continua fino a quando il server invia un buffer di lunghezza zero.

L'esempio seguente è dal programma Pipedemo contenuto negli esempi che provengono dall'SDK di Windows. Illustra una procedura del server remoto che usa una pipe per eseguire il push dei dati dal server al client.

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);
 
}

inviare tramite pipe

/Oi