IClientImpl.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*************************************************************
  2. /* Copyright (C), 2014-2020, lyfz. Co., Ltd.
  3. /* 文件名: IClientImpl.h
  4. /* 作者: Jeff.w
  5. /* 创建日期: 2014-08-07
  6. /* 版本号: V1.0
  7. /* 描述: 核心层底,客户端与服务端通信接口
  8. /* 其它:
  9. /* 主要类模块:
  10. /* 历史修改记录:
  11. /* 作者 时间 版本 描述
  12. /* Jeff.w 14/08/07 1.0 创建这个模块
  13. ***************************************************************/
  14. #ifndef __ICLIENT_IMPL_HEADER__
  15. #define __ICLIENT_IMPL_HEADER__
  16. #pragma once
  17. #include <afxwin.h>
  18. #include <atlbase.h>
  19. //#pragma warning(push)
  20. //#pragma warning(disable:4995)
  21. //#pragma warning(pop)
  22. #include "CritSection.h"
  23. #include "SocketHandle.h"
  24. #include "SocketClientImpl.h"
  25. #include "Client2SrvType.h"
  26. #if 1
  27. #define RemoteSvr _T("lijiafz.vicp.net")
  28. #else
  29. #define RemoteSvr _T("192.168.1.31")
  30. //#define RemoteSvr _T("192.168.1.223")
  31. #endif
  32. //#include "Global.h"
  33. // 宏定义:计算数据包总长度;
  34. #define CALCDATALEN(x) (x+sizeof(STProtocolheader)+sizeof(STProtocoltail))
  35. //const int TCPCLIENTNUM = 10;
  36. class IClientImpl : public ISocketClientHandler
  37. {
  38. typedef SocketClientImpl<ISocketClientHandler> CSocketClient;
  39. friend CSocketClient;
  40. public:
  41. IClientImpl();
  42. ~IClientImpl();
  43. void StartReConnectSrvThread();
  44. static DWORD WINAPI ReConnectSrvThread(LPVOID pInstance);
  45. protected:
  46. virtual void OnThreadBegin(CSocketHandle* pSH);
  47. virtual void OnThreadExit(CSocketHandle* pSH);
  48. virtual void OnDataReceived(CSocketHandle* pSH, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr);
  49. virtual void OnConnectionDropped(CSocketHandle* pSH);
  50. virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError);
  51. protected:
  52. int m_nMode; // IPV4 或 IPV6
  53. int m_nSockType; // UDP 或 TCP
  54. // 连接的服务器地址;
  55. TCHAR m_SvrAddr[MAX_PATH];
  56. // 连接的服务器端口;
  57. TCHAR m_SvrPort[MAX_PATH];
  58. // 线程句柄;
  59. HANDLE m_hReConnectSrvThreadHandle;
  60. // 线程退出句柄;
  61. HANDLE m_hRunObject;
  62. //static IClientImpl *m_pTcpClient[TCPCLIENTNUM];
  63. void _cdecl AppendText(LPCTSTR lpszFormat, ...);
  64. void GetAddress(const SockAddrIn& addrIn, CString& rString) const;
  65. bool GetDestination(SockAddrIn& addrIn) const;
  66. bool SetupMCAST();
  67. // Jeff.最新研究出来的处理方案;
  68. // 对异常包需要计数处理,当1分钟内出现多少异常包时,需要重启服务函数;
  69. //unsigned int VerityIntegrityPacket(IN void *pIntegrityPacket,unsigned int nPacketSize);
  70. void ToprocessRecivebuf(IN CSocketHandle *sockHandle, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  71. public:
  72. BOOL m_bRecevie; // 是否已接收服务器的返回;
  73. BOOL m_bStopbeat; // 是否心跳包;
  74. BOOL m_bSocket; // 套接字是否打开;
  75. CSocketClient m_SocketClient;
  76. BOOL Initialize();
  77. BOOL ConnectServer(LPCTSTR strAddr, LPCTSTR strPort);
  78. void DisConnectServer();
  79. void SendMsg(void *pMsg,const int nLen);
  80. BOOL SolveDBError();
  81. public:
  82. // .用户登陆服务器请求;
  83. BOOL LoginRemoteSvrRequest();
  84. BOOL LoginLocalSvrRequest();
  85. // .用户登陆服务请求,服务器的响应返回;
  86. void LoginRemoteSvrResponse(void *pLoginResult);
  87. void LoginLocalSvrResponse(void *pLoginResult);
  88. // .客户端登陆后,聊天数据请求;
  89. BOOL ChatRemoteSvrMessageRequest(void *szDataBuf, int nDataLen);
  90. BOOL ChatLocalSvrMessageRequest(void *szDataBuf, int nDataLen);//ChatLocalSvrMessageRequest
  91. // .客户端登陆后,聊天数据请求,服务端的响应返回;
  92. void ChatRemoteSvrMessageResponse(void *pResponse);
  93. void ChatLocalSvrMessageResponse(void *pResponse);
  94. void DataToArray(IN BYTE *pData, IN CONST DWORD &dwLength, IN CArray<CStringArray, CStringArray>*List1array);
  95. public:
  96. DWORD m_dwCurRecive; // 当前接收的字节;
  97. DWORD m_dwSumRecive; // 总接收的字节;
  98. BYTE *m_pRecivebuf; // 接收的缓存;
  99. DWORD m_dwSendCode;
  100. SENDHEAD m_tSendhead;
  101. public:
  102. std::vector<unsigned char> _data; // 接收到数据;
  103. void ReAlloc(size_t count){ _data.resize(count);}
  104. void Free()
  105. {
  106. _data.clear();
  107. }
  108. size_t BufferSize() const {return _data.size();}
  109. operator LPBYTE() { return &_data[0]; }
  110. };
  111. #endif