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