IServerImpl.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. // 宏定义:计算数据包总长度;
  35. #define CALCDATALEN(x) (x+sizeof(STProtocolheader)+sizeof(STProtocoltail))
  36. // 使用通信这一块,完全分离出来;
  37. namespace ServerSocketImpl
  38. {
  39. typedef std::list<SOCKET> CSocketList;
  40. class IServerImpl :public ISocketServerHandler
  41. {
  42. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  43. typedef ASocketServerImpl<ISocketServerHandler> CSocketServer;
  44. #else
  45. typedef SocketServerImpl<ISocketServerHandler> CSocketServer;
  46. #endif
  47. friend CSocketServer;
  48. public:
  49. IServerImpl();
  50. ~IServerImpl();
  51. virtual void OnThreadBegin(CSocketHandle* pSH);
  52. virtual void OnThreadExit(CSocketHandle* pSH);
  53. virtual void OnAddConnection(CSocketHandle* pSH, SOCKET newSocket);
  54. virtual void OnDataReceived(CSocketHandle* pSH, const SOCKET sClient, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr, BYTE **pendingbuf, unsigned int& npendingSize, unsigned int& ncursize);
  55. virtual void OnConnectionFailure(CSocketHandle* pSH, SOCKET newSocket);
  56. virtual void OnConnectionDropped(CSocketHandle* pSH);
  57. virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError);
  58. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  59. virtual void OnRemoveConnection(CSocketHandle* pSH , SOCKET dropSocket);
  60. //virtual void OnThreadLoopEnter(CSocketHandle* pSH);
  61. //virtual void OnThreadLoopLeave(CSocketHandle* pSH);
  62. #endif
  63. protected:
  64. CString m_strPort;
  65. int m_nPort;
  66. int m_nMode;
  67. int m_nSockType;
  68. CSocketServer m_SocketServer;
  69. void _cdecl AppendText(LPCTSTR lpszFormat, ...);
  70. void GetAddress(const SockAddrIn& addrIn, CString& rString) const;
  71. bool GetDestination(SockAddrIn& addrIn) const;
  72. bool SetupMCAST();
  73. // Jeff.最新研究出来的处理方案;
  74. // 对异常包需要计数处理,当1分钟内出现多少异常包时,需要重启服务函数;
  75. //unsigned int VerityIntegrityPacket(IN void *pIntegrityPacket,unsigned int nPacketSize);
  76. //void ToprocessRecivebuf(IN CSocketHandle &sockHandle, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  77. void ToprocessRecivebuf(IN PerSocketContext &sockIOBuffer, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  78. //int OnIntegrityPacket(IN CSocketHandle &sockHandle, IN void *pIntegrityPacket);
  79. int OnIntegrityPacket(IN PerSocketContext &sockHandle, IN void *pIntegrityPacket);
  80. public:
  81. BOOL m_bStopbeat;
  82. int m_nSocketIndex;
  83. CRITICAL_SECTION m_csProcessData;
  84. DWORD GetClientConnectCount();
  85. BOOL Initialize();
  86. void Start(IN LPCTSTR strPort,IN const int &nMode);
  87. void Stop();
  88. void Send();
  89. void SendAll(CSocketHandle &sockHandle, unsigned char *pMsg, int nLength);
  90. HANDLE m_hClearInvalidateSocketThread;
  91. HANDLE m_hRunObject;
  92. void StartClearInvalidateSocketThread();
  93. static DWORD WINAPI ClearInvalidateSocketThread(void *pInstance);
  94. private:
  95. CSocketHandle m_SocketFile;
  96. public:
  97. //////////////////////////////////////////////////////////////////////////
  98. // 项目接口;
  99. };
  100. extern IServerImpl* g_pServerSocket[20];
  101. };
  102. #endif