IServerImpl.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /************************************************************************/
  2. /* Copyright (C), 2016-2020, [IT], 保留所有权利;
  3. /* 模 块 名:IServerImpl;
  4. /* 描 述:核心层底,客户端与服务端通信接口;
  5. /*
  6. /* 版 本:[V];
  7. /* 作 者:[IT];
  8. /* 日 期:[2/23/2016];
  9. /*
  10. /*
  11. /* 注 意:;
  12. /*
  13. /* 修改记录:[IT];
  14. /* 修改日期:;
  15. /* 修改版本:;
  16. /* 修改内容:;
  17. /************************************************************************/
  18. #ifndef __ISERVER_IMPL_HEADER__
  19. #define __ISERVER_IMPL_HEADER__
  20. #pragma once
  21. #include <afxwin.h>
  22. #include <atlbase.h>
  23. //#pragma warning(push)
  24. //#pragma warning(disable:4995)
  25. #include <list>
  26. //#pragma warning(pop)
  27. #include "CritSection.h"
  28. #include "SocketHandle.h"
  29. #include "SocketServerImpl.h"
  30. #include "Client2SrvType.h"
  31. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  32. #include "AsyncSocketServerImpl.h"
  33. #endif
  34. //#include "SocketSvrImpl.h"
  35. // 宏定义:计算数据包总长度;
  36. #define CALCDATALEN(x) (x+sizeof(STProtocolheader)+sizeof(STProtocoltail))
  37. // 使用通信这一块,完全分离出来;
  38. namespace ServerSocketImpl
  39. {
  40. typedef std::list<SOCKET> CSocketList;
  41. class IServerImpl :public ISocketServerHandler
  42. {
  43. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  44. typedef ASocketServerImpl<ISocketServerHandler> CSocketServer;
  45. #else
  46. typedef SocketServerImpl<ISocketServerHandler> CSocketServer;
  47. #endif
  48. friend CSocketServer;
  49. public:
  50. IServerImpl();
  51. ~IServerImpl();
  52. virtual void OnThreadBegin(CSocketHandle* pSH);
  53. virtual void OnThreadExit(CSocketHandle* pSH);
  54. virtual void OnAddConnection(CSocketHandle* pSH, SOCKET newSocket);
  55. //virtual void OnDataReceived(CSocketHandle* pSH, const SOCKET sClient, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr, BYTE **pendingbuf, unsigned int& npendingSize, unsigned int& ncursize);
  56. virtual void OnDataReceived(LPWSAOVERLAPPED pSH, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr);
  57. virtual void OnConnectionFailure(CSocketHandle* pSH, SOCKET newSocket);
  58. virtual void OnConnectionDropped(CSocketHandle* pSH);
  59. virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError);
  60. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  61. virtual void OnRemoveConnection(CSocketHandle* pSH , SOCKET dropSocket);
  62. //virtual void OnThreadLoopEnter(CSocketHandle* pSH);
  63. //virtual void OnThreadLoopLeave(CSocketHandle* pSH);
  64. #endif
  65. protected:
  66. CString m_strPort;
  67. int m_nPort;
  68. int m_nMode;
  69. int m_nSockType;
  70. CSocketServer m_SocketServer;
  71. void _cdecl AppendText(LPCTSTR lpszFormat, ...);
  72. void GetAddress(const SockAddrIn& addrIn, CString& rString) const;
  73. bool GetDestination(SockAddrIn& addrIn) const;
  74. bool SetupMCAST();
  75. // Jeff.最新研究出来的处理方案;
  76. // 对异常包需要计数处理,当1分钟内出现多少异常包时,需要重启服务函数;
  77. //unsigned int VerityIntegrityPacket(IN void *pIntegrityPacket,unsigned int nPacketSize);
  78. //void ToprocessRecivebuf(IN CSocketHandle &sockHandle, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  79. void ToprocessRecivebuf(IN PerSocketContext &sockIOBuffer, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  80. //int OnIntegrityPacket(IN CSocketHandle &sockHandle, IN void *pIntegrityPacket);
  81. int OnIntegrityPacket(IN PerSocketContext &sockHandle, IN void *pIntegrityPacket);
  82. public:
  83. BOOL m_bStopbeat;
  84. int m_nSocketIndex;
  85. CRITICAL_SECTION m_csProcessData;
  86. DWORD GetClientConnectCount();
  87. BOOL Initialize();
  88. void Start(IN LPCTSTR strPort,IN const int &nMode);
  89. void Stop();
  90. void Send();
  91. void SendAll(CSocketHandle &sockHandle, unsigned char *pMsg, int nLength);
  92. HANDLE m_hClearInvalidateSocketThread;
  93. HANDLE m_hRunObject;
  94. void StartClearInvalidateSocketThread();
  95. static DWORD WINAPI ClearInvalidateSocketThread(void *pInstance);
  96. private:
  97. CSocketHandle m_SocketFile;
  98. public:
  99. //////////////////////////////////////////////////////////////////////////
  100. // 项目接口;
  101. };
  102. extern IServerImpl* g_pServerSocket;
  103. };
  104. #endif