Listing 1: Named-pipe base class and derived classes
// base class for named pipes class nmpipe_cNamedPipe { protected: BOOL bInError; HANDLE hPipe; OVERLAPPED Overlap; nmpipe_eRetcode BlockForIO(HANDLE, DWORD, DWORD); nmpipe_eRetcode GetAvailableData(DWORD); nmpipe_cNamedPipe(); public: virtual ~nmpipe_cNamedPipe(); nmpipe_eRetcode Read(void *, DWORD, DWORD = nmpipeDefaultTimeOut); nmpipe_eRetcode Write(const void *, DWORD, DWORD = nmpipeDefaultTimeOut); BOOL InError() { return bInError; }; }; // client-side named pipe class class nmpipe_cConnector : public nmpipe_cNamedPipe { public: nmpipe_cConnector(const char *, int = nmpipeDefaultRetries); virtual ~nmpipe_cConnector(); }; // server-side named pipe class class nmpipe_cListener : public nmpipe_cNamedPipe { protected: HANDLE hEventShutdown; public: nmpipe_cListener(const char *, HANDLE, DWORD = nmpipeDefaultTimeOut); virtual ~nmpipe_cListener(); nmpipe_eRetcode Connect(DWORD = nmpipeDefaultTimeOut); nmpipe_eRetcode Disconnect(); }; /* End of File */