Listing 7: Server thread handler
void srv_cThread::Handler()
{
if (Listener.InError()) {
return;
}
while (TRUE) {
unsigned long cbData;
nmpipe_eRetcode rc = Listener.Connect(INFINITE);
if (rc == nmpipeTimeOut) {
break;
}
else if (rc != nmpipeOK) {
SetEvent(hEventShutdown);
break;
}
if (Listener.Read(&cbData, sizeof(cbData)) != nmpipeOK) {
Listener.Disconnect();
continue;
}
char *pData = new char [cbData];
if (Listener.Read(pData, cbData) != nmpipeOK) {
delete pData;
Listener.Disconnect();
continue;
}
if (strcmp(pData, "shutdown") == 0) {
SetEvent(hEventShutdown);
}
strrev(pData);
if (Listener.Write(&cbData, sizeof(cbData)) != nmpipeOK) {
delete pData;
Listener.Disconnect();
continue;
}
if (Listener.Write(pData, cbData) != nmpipeOK) {
delete pData;
Listener.Disconnect();
continue;
}
delete pData;
Listener.Disconnect();
}
return;
}
//End of File