barrier/CSocket.h

42 lines
1.1 KiB
C++

#ifndef CSOCKET_H
#define CSOCKET_H
#include "ISocket.h"
class IJob;
class CSocket : public ISocket {
public:
CSocket();
virtual ~CSocket();
// ISocket overrides
virtual void setReadJob(IJob* adoptedJob);
virtual void setWriteJob(IJob* adoptedJob);
virtual void connect(const CString& hostname, UInt16 port) = 0;
virtual void listen(const CString& hostname, UInt16 port) = 0;
virtual ISocket* accept() = 0;
virtual SInt32 read(void* buffer, SInt32 numBytes) = 0;
virtual void write(const void* buffer, SInt32 numBytes) = 0;
protected:
// called when the read or write job is changed. default does nothing.
virtual void onJobChanged();
// subclasses should call these at the appropriate time. different
// platforms will arrange to detect these situations differently.
// does nothing if the respective job is NULL.
void runReadJob();
void runWriteJob();
// return true iff the socket has a read job or a write job
bool hasReadJob() const;
bool hasWriteJob() const;
private:
IJob* m_readJob;
IJob* m_writeJob;
};
#endif