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 */