IServerImpl.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*************************************************************
  2. /* Copyright (C), 2014-2020, lyfz. Co., Ltd.
  3. /* 文件名: IServerImpl.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. #pragma once
  15. #include <afxwin.h>
  16. #include <atlbase.h>
  17. //#pragma warning(push)
  18. //#pragma warning(disable:4995)
  19. #include <list>
  20. //#pragma warning(pop)
  21. #include "CritSection.h"
  22. #include "SocketHandle.h"
  23. #include "SocketServerImpl.h"
  24. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  25. #include "AsyncSocketServerImpl.h"
  26. #endif
  27. #include "Global.h"
  28. // 宏定义:计算数据包总长度;
  29. #define CALCDATALEN(x) (x+sizeof(STProtocolheader)+sizeof(STProtocoltail))
  30. // 使用通信这一块,完全分离出来;
  31. namespace ServerSocketImpl
  32. {
  33. typedef std::list<SOCKET> CSocketList;
  34. class IServerImpl :public ISocketServerHandler
  35. {
  36. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  37. typedef ASocketServerImpl<ISocketServerHandler> CSocketServer;
  38. #else
  39. typedef SocketServerImpl<ISocketServerHandler> CSocketServer;
  40. #endif
  41. friend CSocketServer;
  42. public:
  43. IServerImpl();
  44. ~IServerImpl();
  45. virtual void OnThreadBegin(CSocketHandle* pSH);
  46. virtual void OnThreadExit(CSocketHandle* pSH);
  47. virtual void OnAddConnection(CSocketHandle* pSH, SOCKET newSocket);
  48. virtual void OnDataReceived(LPWSAOVERLAPPED pSH, const BYTE* pbData, DWORD dwCount, const SockAddrIn& addr);
  49. virtual void OnConnectionFailure(CSocketHandle* pSH, SOCKET newSocket);
  50. virtual void OnConnectionDropped(CSocketHandle* pSH);
  51. virtual void OnConnectionError(CSocketHandle* pSH, DWORD dwError);
  52. #if defined(SOCKHANDLE_USE_OVERLAPPED)
  53. virtual void OnRemoveConnection(CSocketHandle* pSH , SOCKET dropSocket);
  54. //virtual void OnThreadLoopEnter(CSocketHandle* pSH);
  55. //virtual void OnThreadLoopLeave(CSocketHandle* pSH);
  56. #endif
  57. protected:
  58. CString m_strPort;
  59. int m_nPort;
  60. int m_nMode;
  61. int m_nSockType;
  62. CSocketServer m_SocketServer;
  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. void ToprocessRecivebuf(IN SocketIOBuffer &sockIOBuffer, IN const BYTE* pReceivebuf, IN DWORD dwReceiveSize);
  72. //int OnIntegrityPacket(IN CSocketHandle &sockHandle, IN void *pIntegrityPacket);
  73. int OnIntegrityPacket(IN SocketIOBuffer &sockHandle, IN void *pIntegrityPacket);
  74. public:
  75. BOOL m_bStopbeat;
  76. int m_nSocketIndex;
  77. CRITICAL_SECTION m_csProcessData;
  78. DWORD GetClientConnectCount();
  79. BOOL Initialize();
  80. void Start(IN LPCTSTR strPort,IN const int &nMode);
  81. void Stop();
  82. void Send();
  83. void SendAll(CSocketHandle &sockHandle, unsigned char *pMsg, int nLength);
  84. private:
  85. CSocketHandle m_SocketFile;
  86. };
  87. extern IServerImpl* g_pServerSocket[20];
  88. };