167 lines
3.9 KiB
C
167 lines
3.9 KiB
C
|
|
#ifndef _TCP_SOCKET_SERVICE_H_
|
|||
|
|
#define _TCP_SOCKET_SERVICE_H_
|
|||
|
|
|
|||
|
|
#include "KernelEngineHead.h"
|
|||
|
|
#include "QueueService.h"
|
|||
|
|
#include "QueueServiceEvent.h"
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
#define SOCKET_STATUS_IDLE 0 //<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
#define SOCKET_STATUS_WAIT 1 //<2F>ȴ<EFBFBD>״̬
|
|||
|
|
#define SOCKET_STATUS_CONNECT 2 //<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
|||
|
|
#define CONNECT_SUCCESS 0 //<2F><><EFBFBD>ӳɹ<D3B3>
|
|||
|
|
#define CONNECT_FAILURE 1 //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
#define CONNECT_EXCEPTION 2 //<2F><><EFBFBD><EFBFBD><EFBFBD>쳣
|
|||
|
|
#define CONNECT_PROXY_FAILURE 3 //<2F><><EFBFBD>ӳɹ<D3B3>
|
|||
|
|
#define CONNECT_PROXY_USER_INVALID 4 //<2F>û<EFBFBD><C3BB><EFBFBD>Ч
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define QUEUE_SEND_REQUEST 1 //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
|
|||
|
|
#define QUEUE_CONNECT_REQUEST 2 //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
|
|||
|
|
#define QUEUE_SAFE_CLOSE 3 //<2F><>ȫ<EFBFBD>ر<EFBFBD>
|
|||
|
|
#define QUEUE_DETECT_SOCKET 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CTCPSocketService : public CWnd, public ITCPSocketService, public IQueueServiceSink
|
|||
|
|
{
|
|||
|
|
private:
|
|||
|
|
bool m_bService; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
CQueueServiceEvent m_QueueServiceEvent; //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
|||
|
|
CQueueService m_QueueService; //<2F><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
BYTE m_cbSendRound; //<2F>ֽ<EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
|
BYTE m_cbRecvRound; //<2F>ֽ<EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
|
DWORD m_dwSendXorKey; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
|
|||
|
|
DWORD m_dwRecvXorKey; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
bool m_bSuccess; //<2F><><EFBFBD>ӳɹ<D3B3>
|
|||
|
|
DWORD m_dwTempServerIP; //<2F><><EFBFBD>ӵ<EFBFBD>IP
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
DWORD m_dwServerIP; //<2F><><EFBFBD>ӵ<EFBFBD>IP
|
|||
|
|
WORD m_wPort; //<2F><><EFBFBD>Ӷ˿<D3B6>
|
|||
|
|
|
|||
|
|
//<2F>ں˱<DABA><CBB1><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
SOCKET m_hSocket; //<2F><><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
|
|||
|
|
WORD m_wServiceID; //<2F><><EFBFBD><EFBFBD>ID
|
|||
|
|
BYTE m_cbSocketStatus; //<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
DWORD m_dwSendTickCount; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
DWORD m_dwRecvTickCount; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
DWORD m_dwSendPacketCount; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>
|
|||
|
|
DWORD m_dwRecvPacketCount; //<2F><><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
WORD m_wRecvSize; //<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>
|
|||
|
|
BYTE m_cbRecvBuf[SOCKET_TCP_BUFFER*10]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
CTCPSocketService(void);
|
|||
|
|
~CTCPSocketService(void);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
|
|||
|
|
virtual VOID Release()
|
|||
|
|
{
|
|||
|
|
if (IsValid()) delete this;
|
|||
|
|
}
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
virtual bool IsValid()
|
|||
|
|
{
|
|||
|
|
return AfxIsValidAddress(this, sizeof(CTCPSocketService)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool StartService();
|
|||
|
|
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool ConcludeService();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>нӿ<D0BD>
|
|||
|
|
public:
|
|||
|
|
//֪ͨ<CDA8>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
|||
|
|
virtual bool SetServiceID(WORD wServiceID);
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
virtual bool SetTCPSocketEvent(IUnknownEx * pIUnknownEx);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܽӿ<DCBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool CloseSocket();
|
|||
|
|
//<2F><><EFBFBD>ӵ<EFBFBD>ַ
|
|||
|
|
virtual bool Connect(DWORD dwServerIP, WORD wPort);
|
|||
|
|
//<2F><><EFBFBD>ӵ<EFBFBD>ַ
|
|||
|
|
virtual bool Connect(LPCTSTR szServerIP, WORD wPort);
|
|||
|
|
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
|||
|
|
virtual bool SendData(WORD wMainCmdID, WORD wSubCmdID);
|
|||
|
|
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
|||
|
|
virtual bool SendData(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
//<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
|||
|
|
DWORD TranslateAddr(LPCTSTR pszServerAddr);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool SendDataBuffer(void * pBuffer, WORD wSendSize);
|
|||
|
|
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
VOID CloseSocket(BYTE cbShutReason);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CrevasseBuffer(BYTE cbDataBuffer[], WORD wDataSize);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD EncryptBuffer(BYTE cbDataBuffer[], WORD wDataSize, WORD wBufferSize);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F>ֽ<EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
|
inline WORD SeedRandMap(WORD wSeed);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
|
inline BYTE MapSendByte(BYTE cbData);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>
|
|||
|
|
inline BYTE MapRecvByte(BYTE cbData);
|
|||
|
|
|
|||
|
|
//<2F><>Ϣӳ<CFA2><D3B3>
|
|||
|
|
protected:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
LRESULT OnSocketNotify(WPARAM wParam, LPARAM lParam);
|
|||
|
|
|
|||
|
|
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
|
|||
|
|
LRESULT OnSocketNotifyRead(WPARAM wParam, LPARAM lParam);
|
|||
|
|
//<2F><><EFBFBD>緢<EFBFBD><E7B7A2>
|
|||
|
|
LRESULT OnSocketNotifyWrite(WPARAM wParam, LPARAM lParam) {};
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
|
|||
|
|
LRESULT OnSocketNotifyClose(WPARAM wParam, LPARAM lParam);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LRESULT OnSocketNotifyConnect(WPARAM wParam, LPARAM lParam);
|
|||
|
|
|
|||
|
|
DECLARE_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif //_TCP_SOCKET_SERVICE_H_
|