1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| struct DispatcherRoot::DispatcherRootPlatformSpecificData
{
char buffer[kMessageBufferSize]; // buffer to store client requests
struct
{
HANDLE hPipe;
bool fPending;
DWORD dwState;
} hPipeStruct[kPipeCount];
OVERLAPPED ovr[kPipeCount];
HANDLE hEvent[kPipeCount];
CString pipeName; //The name of server pipe
};
// Create pipes
for(int i = 0; i < kPipeCount; i++)
{
mPlatformSpecificData->hEvent[i] =
CreateEvent(
NULL,
TRUE,
TRUE,
NULL);
if(mPlatformSpecificData->hEvent[i] == NULL)
{
LCTrace("Should not happend : CreateEvent failed with %d.\n", GetLastError());
return ;
}
mPlatformSpecificData->ovr[i].hEvent = mPlatformSpecificData->hEvent[i]; // je garde les event dans ma structure
mPlatformSpecificData->hPipeStruct[i].hPipe = CreateNamedPipe( mPlatformSpecificData->pipeName,
PIPE_ACCESS_INBOUND | FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
kPipeCount, kMessageBufferSize, kMessageBufferSize,
0, NULL);
mPlatformSpecificData->hPipeStruct[i].fPending = ConnectToNewClient(mPlatformSpecificData->hPipeStruct[i].hPipe,&mPlatformSpecificData->ovr[i]);
if(!mPlatformSpecificData->hPipeStruct[i].fPending)// ConnectNamedPipe should return 0 for an OVERLAPPED pipe
{
LCTrace("ConnectNamedPipe has failed");
}
mPlatformSpecificData->hPipeStruct[i].dwState = mPlatformSpecificData->hPipeStruct[i].fPending ? CONNECTING_STATE : READING_STATE;
} |
Partager