诸暨麻将添加redis
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

171 行
4.6 KiB

  1. #ifndef _TCP_SOCKET_SERVICE_H_
  2. #define _TCP_SOCKET_SERVICE_H_
  3. #include "KernelEngineHead.h"
  4. #include "QueueService.h"
  5. #include "QueueServiceEvent.h"
  6. #include "MyEncrypt.h"
  7. //网络状态
  8. #define SOCKET_STATUS_IDLE 0 //空闲状态
  9. #define SOCKET_STATUS_WAIT 1 //等待状态
  10. #define SOCKET_STATUS_CONNECT 2 //连接状态
  11. //连接错误
  12. #define CONNECT_SUCCESS 0 //连接成功
  13. #define CONNECT_FAILURE 1 //连接失败
  14. #define CONNECT_EXCEPTION 2 //参数异常
  15. #define CONNECT_PROXY_FAILURE 3 //连接成功
  16. #define CONNECT_PROXY_USER_INVALID 4 //用户无效
  17. //
  18. //动作定义
  19. #define QUEUE_SEND_REQUEST 1 //发送标识
  20. #define QUEUE_CONNECT_REQUEST 2 //发送标识
  21. #define QUEUE_SAFE_CLOSE 3 //安全关闭
  22. #define QUEUE_DETECT_SOCKET 4 //检测连接
  23. class CTCPSocketService : public CWnd, public ITCPSocketService, public IQueueServiceSink
  24. {
  25. private:
  26. bool m_bService; //服务标志
  27. CQueueServiceEvent m_QueueServiceEvent; //通知组件
  28. CQueueService m_QueueService; //队列对象
  29. //加密数据
  30. protected:
  31. BYTE m_cbSendRound; //字节映射
  32. BYTE m_cbRecvRound; //字节映射
  33. DWORD m_dwSendXorKey; //发送密钥
  34. DWORD m_dwRecvXorKey; //接收密钥
  35. CMyEncrypt m_MyEncrypt;
  36. private:
  37. bool m_bSuccess; //连接成功
  38. private:
  39. DWORD m_dwServerIP; //连接的IP
  40. WORD m_wPort; //链接端口
  41. TCHAR m_szIp[72];
  42. //内核变量
  43. protected:
  44. SOCKET m_hSocket; //连接句柄
  45. WORD m_wServiceID; //服务ID
  46. BYTE m_cbSocketStatus; //连接状态
  47. //计数变量
  48. protected:
  49. DWORD m_dwSendTickCount; //发送时间
  50. DWORD m_dwRecvTickCount; //接收时间
  51. DWORD m_dwSendPacketCount; //发送计数
  52. DWORD m_dwRecvPacketCount; //接受计数
  53. //接收变量
  54. protected:
  55. WORD m_wRecvSize; //接收长度
  56. BYTE m_cbRecvBuf[SOCKET_TCP_BUFFER * 10]; //接收缓冲
  57. public:
  58. CTCPSocketService(void);
  59. ~CTCPSocketService(void);
  60. //基础接口
  61. public:
  62. //释放对象
  63. virtual VOID Release()
  64. {
  65. if (IsValid()) delete this;
  66. }
  67. //是否有效
  68. virtual bool IsValid()
  69. {
  70. return AfxIsValidAddress(this, sizeof(CTCPSocketService)) ? true : false;
  71. }
  72. //接口查询
  73. virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
  74. //服务接口
  75. public:
  76. //启动服务
  77. virtual bool StartService();
  78. //停止服务
  79. virtual bool ConcludeService();
  80. //队列接口
  81. public:
  82. //通知回调函数
  83. virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize);
  84. //配置接口
  85. public:
  86. //配置函数
  87. virtual bool SetServiceID(WORD wServiceID);
  88. //设置接口
  89. virtual bool SetTCPSocketEvent(IUnknownEx * pIUnknownEx);
  90. //功能接口
  91. public:
  92. //关闭连接
  93. virtual bool CloseSocket();
  94. //连接地址
  95. virtual bool Connect(DWORD dwServerIP, WORD wPort);
  96. //连接地址
  97. virtual bool Connect(LPCTSTR szServerIP, WORD wPort);
  98. //发送函数
  99. virtual bool SendData(WORD wMainCmdID, WORD wSubCmdID);
  100. //发送函数
  101. virtual bool SendData(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
  102. //辅助函数
  103. protected:
  104. //地址解释
  105. DWORD TranslateAddr(LPCTSTR pszServerAddr);
  106. //发送数据
  107. bool SendDataBuffer(void * pBuffer, WORD wSendSize);
  108. //关闭连接
  109. VOID CloseSocket(BYTE cbShutReason);
  110. //加密函数
  111. protected:
  112. //解密数据
  113. WORD CrevasseBuffer(BYTE cbDataBuffer[], WORD wDataSize);
  114. //加密数据
  115. WORD EncryptBuffer(BYTE cbDataBuffer[], WORD wDataSize, WORD wBufferSize, BYTE cbDataKind);
  116. //内联函数
  117. private:
  118. //字节映射
  119. inline WORD SeedRandMap(WORD wSeed);
  120. //发送映射
  121. inline BYTE MapSendByte(BYTE cbData);
  122. //接收映射
  123. inline BYTE MapRecvByte(BYTE cbData);
  124. //发送映射
  125. inline BYTE MapSendByteEx(BYTE cbData);
  126. //接收映射
  127. inline BYTE MapRecvByteEx(BYTE cbData);
  128. //消息映射
  129. protected:
  130. //网络消息
  131. LRESULT OnSocketNotify(WPARAM wParam, LPARAM lParam);
  132. //消息函数
  133. protected:
  134. //网络读取
  135. LRESULT OnSocketNotifyRead(WPARAM wParam, LPARAM lParam);
  136. //网络发送
  137. LRESULT OnSocketNotifyWrite(WPARAM wParam, LPARAM lParam) {};
  138. //网络关闭
  139. LRESULT OnSocketNotifyClose(WPARAM wParam, LPARAM lParam);
  140. //网络连接
  141. LRESULT OnSocketNotifyConnect(WPARAM wParam, LPARAM lParam);
  142. DECLARE_MESSAGE_MAP()
  143. };
  144. #endif //_TCP_SOCKET_SERVICE_H_