Blame view

src/Common/BaseSocket.h 2.03 KB
e30d6793   Zou XiKun   v0.0.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  
  #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_)