Udostępnij przez


Implementowanie potoków wyjściowych na serwerze

Aby rozpocząć odbieranie danych z serwera, klient wywołuje jedną z procedur zdalnych serwera. Ta procedura musi wielokrotnie wywoływać procedurę wypychania w szkielecie serwera. Kompilator MIDL używa pliku IDL aplikacji do automatycznego generowania procedury push serwera.

Procedura serwera zdalnego musi wypełnić bufor potoku wyjściowego danymi, zanim wywoła procedurę wypychania. Za każdym razem, gdy program serwera wywołuje procedurę wypychania w wycinku, procedura wypychania marshaluje dane i przesyła je do klienta. Pętla będzie kontynuowana do momentu, w którym serwer wyśle bufor o zerowej długości.

Poniższy przykład pochodzi z programu Pipedemo zawartego w przykładach, które są dostarczane z zestawem Windows SDK. Ilustruje to procedurę zdalnego serwera, która przesyła dane za pomocą potoku z serwera do klienta.

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

rura

/Oi