42 lines
1.1 KiB
C
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
|