Files
wnmj/Servers/服务器组件/网络服务/ClientSocket.h
2026-02-13 14:34:15 +08:00

157 lines
3.7 KiB
C++

#ifndef TCP_SOCKET_HEAD_FILE
#define TCP_SOCKET_HEAD_FILE
#pragma once
#include "WinSock2.h"
#include "ClientSocketHead.h"
//////////////////////////////////////////////////////////////////////////
//TCP 网络连接
class CClientSocket : public CWnd, public IClientSocket
{
//辅助变量
protected:
WORD m_wSocketID; //网络标识
BYTE m_cbSocketStatus; //网络状态
//内核变量
protected:
SOCKET m_hSocket; //连接句柄
IClientSocketSink * m_pIClientSocketSink; //回调接口
//接收变量
protected:
WORD m_wRecvSize; //接收长度
BYTE m_cbRecvBuf[SOCKET_TCP_BUFFER*10]; //接收缓冲
//缓冲变量
protected:
bool m_bNeedBuffer; //缓冲状态
DWORD m_dwBufferData; //缓冲数据
DWORD m_dwBufferSize; //缓冲大小
LPBYTE m_pcbDataBuffer; //缓冲数据
//加密数据
protected:
BYTE m_cbSendRound; //字节映射
BYTE m_cbRecvRound; //字节映射
DWORD m_dwSendXorKey; //发送密钥
DWORD m_dwRecvXorKey; //接收密钥
//计数变量
protected:
DWORD m_dwSendTickCount; //发送时间
DWORD m_dwRecvTickCount; //接收时间
DWORD m_dwSendPacketCount; //发送计数
DWORD m_dwRecvPacketCount; //接受计数
//函数定义
public:
//构造函数
CClientSocket();
//析构函数
virtual ~CClientSocket();
//基础接口
public:
//释放对象
virtual VOID Release() { delete this; }
//接口查询
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//标识接口
public:
//获取标识
virtual WORD GetSocketID() { return m_wSocketID;}
//设置标识
virtual VOID SetSocketID(WORD wSocketID) { m_wSocketID=wSocketID; }
//配置接口
public:
//设置接口
virtual bool SetTCPSocketSink(IUnknownEx * pIUnknownEx);
//获取接口
virtual VOID * GetTCPSocketSink(const IID & Guid, DWORD dwQueryVer);
//信息接口
public:
//获取状态
virtual BYTE GetSocketStatus() { return m_cbSocketStatus; }
//发送间隔
virtual DWORD GetLastSendTick() { return m_dwSendTickCount; }
//接收间隔
virtual DWORD GetLastRecvTick() { return m_dwRecvTickCount; }
//发送数目
virtual DWORD GetSendPacketCount() { return m_dwSendPacketCount; }
//接收数目
virtual DWORD GetRecvPacketCount() { return m_dwRecvPacketCount; }
//操作接口
public:
//关闭连接
virtual VOID CloseSocket();
//连接操作
virtual BYTE Connect(DWORD dwServerIP, WORD wPort);
//连接操作
virtual BYTE Connect(LPCTSTR pszServerIP, WORD wPort);
//发送函数
virtual WORD SendData(WORD wMainCmdID, WORD wSubCmdID);
//发送函数
virtual WORD SendData(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//辅助函数
protected:
//连接代理
DWORD ConnectProxyServer();
//地址解释
DWORD TranslateAddr(LPCTSTR pszServerAddr);
//加密函数
protected:
//解密数据
WORD CrevasseBuffer(BYTE cbDataBuffer[], WORD wDataSize);
//加密数据
WORD EncryptBuffer(BYTE cbDataBuffer[], WORD wDataSize, WORD wBufferSize);
//内联函数
private:
//发送映射
inline BYTE MapSendByte(BYTE cbData);
//接收映射
inline BYTE MapRecvByte(BYTE cbData);
//辅助函数
protected:
//关闭连接
VOID CloseSocket(BYTE cbShutReason);
//缓冲数据
VOID AmortizeBuffer(VOID * pData, WORD wDataSize);
//发送数据
DWORD SendDataBuffer(VOID * pBuffer, WORD wSendSize);
//消息映射
protected:
//时间消息
VOID OnTimer(UINT_PTR nIDEvent);
//网络消息
LRESULT OnSocketNotify(WPARAM wParam, LPARAM lParam);
//消息函数
protected:
//网络读取
LRESULT OnSocketNotifyRead(WPARAM wParam, LPARAM lParam);
//网络发送
LRESULT OnSocketNotifyWrite(WPARAM wParam, LPARAM lParam);
//网络关闭
LRESULT OnSocketNotifyClose(WPARAM wParam, LPARAM lParam);
//网络连接
LRESULT OnSocketNotifyConnect(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////////
#endif