Files
wnmj/Servers/服务器组件/内核引擎/TCPSocketService.h

167 lines
3.9 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#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_