BaseSocket.h 2.1 KB

#if !defined(AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_)
#define AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>

#include "BaseDataTypeDef.h"
#include "BaseSocketDef.h"
#include "BaseObject.h"
#include "BaseEvent.h"
#include "BaseSocketSendThread.h"
#include "BaseSocketReceiveThread.h"
#include "DataExchangePipe.h"

#define SOCKET_BUFFER_SIZE			8192

class CBaseSocket : public CBaseObject
{
public:
	CBaseSocket();
	virtual ~CBaseSocket();
	BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort );
	BOOL Create(UINT nSocketPort = 0, int nSocketType = SOCK_STREAM);

// Overrides
public:
	void Attach(SOCKET hSocket);
	BOOL Accept(CBaseSocket* pBaseSocket);
	BOOL SetNonBlocking(BOOL bNonBlocking = TRUE);
	BOOL NothingIsReceived();
	void SetStatus(UINT nStatus);
	UINT GetStatus();
	long Stop(BOOL bWaitForStopped = TRUE);
	long Start(BOOL bSendSocketData = FALSE);
	long SendData(DWORD nTimeOut);
	long PutData(void* pData, INT32 nDataLen, DWORD nTimeOut = 100);
	void Close();
	long GetPeerName(char* IPAddress, long* plPort);
	int Listen(long nConnectBackblog = 5);
	virtual void OnReceive(int nErrorCode);
	virtual void OnClose(int nErrorCode);
	virtual void OnConnect(int nErrorCode);
	virtual void OnSend(int nErrorCode);
	virtual void OnAccept(int nErrorCode);

// Attributes
public:
	SOCKET m_hSocket;
	CBaseEvent m_SendAvailable;

protected:
	CBaseSocketSendThread* m_pSendThread;
	CBaseSocketReceiveThread* m_pReceiveThread;

	//为了真正的释放new出来的两个线程的资源(不包括线程自身的资源),使用了下面两个变量
	CBaseSocketSendThread* m_pSendThreadToDelete;
	CBaseSocketReceiveThread* m_pReceiveThreadToDelete;

	CDataExchangePipe* m_pDataExchangePipe;
	BYTE m_pRecvBuffer[SOCKET_BUFFER_SIZE];
	UINT32 m_lRecvBufferPos;
	UINT m_nStatus;
	long m_lLastReceiveCount;
};

#endif // !defined(AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_)