Implémentation de canaux de sortie sur le serveur
Pour commencer à recevoir des données d’un serveur, un client appelle l’une des procédures distantes du serveur. Cette procédure doit appeler à plusieurs reprises la procédure push dans le stub du serveur. Le compilateur MIDL utilise le fichier IDL de l’application pour générer automatiquement la procédure Push du serveur.
La routine de serveur distant doit remplir la mémoire tampon du canal de sortie avec des données avant d’appeler la procédure push. Chaque fois que le programme serveur appelle la procédure push dans son stub, la procédure push marshale les données et les transmet au client. La boucle continue jusqu’à ce que le serveur envoie une mémoire tampon de longueur nulle.
L’exemple suivant provient du programme Pipedemo contenu dans les exemples fournis avec le Kit de développement logiciel (SDK) Windows. Il illustre une procédure de serveur distant qui utilise un canal pour envoyer des données du serveur au 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);
}
Rubriques connexes