NetClient.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // NetClient.h: interface for the CNetClient class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_NETCLIENT_H__92C76923_17D1_46D4_ADE1_A1BDE2E5788A__INCLUDED_)
  5. #define AFX_NETCLIENT_H__92C76923_17D1_46D4_ADE1_A1BDE2E5788A__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "../../Multiserver/Rainbow/Interface/IClient.h"
  10. #include "KThread.h"
  11. class CNetClient : protected KThread   //!workmode_singlethread
  12. {
  13. public:
  14. CNetClient(class CNetCenter* pNetCenter, BOOL bAutoFree);
  15. virtual ~CNetClient();
  16. public:
  17. BOOL Startup(size_t maxFreeBuffers, size_t bufferSize, const char * pAddressToConnectServer, unsigned short usPortToConnectServer, BOOL block = TRUE);
  18. BOOL Shutdown();
  19. BOOL IsReady() const { return m_ready && m_pClient != NULL; }
  20. private:
  21. std::string m_SvrAddr;
  22. DWORD m_SvrIP;
  23. unsigned short m_SvrPort;
  24. public:
  25. DWORD GetSvrIP() const {return m_SvrIP;}
  26. unsigned short GetSvrPort() const {return m_SvrPort;}
  27. private:
  28. static void __stdcall ClientEventNotify (
  29. LPVOID lpParam,
  30. const unsigned long &ulnEventType);
  31. private:
  32. IClient* m_pClient;
  33. BOOL m_ready;
  34. CNetCenter* m_pNetCenter;
  35. BOOL m_bAutoFree;
  36. HANDLE m_hOver;
  37. BOOL m_bReqDisconn;
  38. BOOL m_bBlockSD;
  39. LONG m_shutdown;
  40. private:
  41. void CheckSDSignal();
  42. void DirectClearup();
  43. protected:
  44. void InterShutdown(); //!workmode_singlethread
  45. public:
  46. CNetCenter* GetCenter() const {return m_pNetCenter;}
  47. IClient* GetClient() const {return m_ready ? m_pClient : NULL;}
  48. protected:
  49. virtual void OnStartupFail() {}
  50. virtual void OnShutdownFail() {}
  51. virtual DWORD Main(LPVOID lpParam);
  52. #ifndef _WORKMODE_SINGLETHREAD
  53. virtual void EnterLoop() {}
  54. virtual void LeaveLoop() {}
  55. #endif
  56. virtual void BeginRoute() {}
  57. virtual void EndRoute() {}
  58. virtual void RecvPackage(const void* pData, size_t size) {}
  59. public:
  60. BOOL SendPackage(const void* pData, size_t size);
  61. private:
  62. void _NotifyServerEventCreate();
  63. void _NotifyServerEventClose();
  64. protected:
  65. virtual void OnServerEventCreate() {}
  66. virtual void OnServerEventClose() {}
  67. private:
  68. void TryFreeThis() {if (m_bAutoFree) {assert(!m_hProcessor); DeleteThis();}}
  69. protected:
  70. virtual void DeleteThis() {assert(false);}
  71. private:
  72. BOOL DoRoute();
  73. public:
  74. BOOL Route();
  75. };
  76. class CNetClientDup 
  77. {
  78. public:
  79. CNetClientDup() : m_pClient(NULL), m_SvrIP(0) {}
  80. CNetClientDup(const CNetClientDup& netclntdup) : m_pClient(netclntdup.GetClient()), m_SvrIP(netclntdup.m_SvrIP) {_SafeAddRef(m_pClient);}
  81. CNetClientDup(const CNetClient& netclient);
  82. virtual ~CNetClientDup() {_SafeRelease(m_pClient);}
  83. BOOL IsValid() const {return m_pClient != NULL;}
  84. IClient* GetClient() const {return m_pClient;}
  85. DWORD GetSvrIP() const {return m_SvrIP;}
  86. BOOL SendPackage(const void* pData, size_t size) const;
  87. void Clearup() {_SafeRelease(m_pClient); m_SvrIP = 0;}
  88. CNetClientDup& operator =(const CNetClientDup& src)
  89. { if (&src == this) return *this; _SafeRelease(m_pClient); m_pClient = src.m_pClient; _SafeAddRef(m_pClient); m_SvrIP = src.m_SvrIP; return *this; }
  90. CNetClientDup& operator =(const CNetClient& src);
  91. private:
  92. IClient* m_pClient;
  93. DWORD m_SvrIP;
  94. };
  95. #endif // !defined(AFX_NETCLIENT_H__92C76923_17D1_46D4_ADE1_A1BDE2E5788A__INCLUDED_)