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

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/03/24
  3. file base: ClientStage
  4. file ext: h
  5. author: liupeng
  6. purpose:
  7. *********************************************************************/
  8. #ifndef __INCLUDE_CLIENTSTAGE_H__
  9. #define __INCLUDE_CLIENTSTAGE_H__
  10. #if defined (_MSC_VER) && (_MSC_VER >= 1020)
  11. #pragma once
  12. #endif
  13. #include "ESClientSocketClient.h"
  14. #include "ESClienttstring.h"
  15. #include "InterfaceRainbowInterface.h"
  16. #include "InterfaceIClient.h"
  17. #define MAX_BUFFER_KEEPINPOOL 30
  18. #define BUFFER_SIZE 1024
  19. #define EXTEND_BUFFER_SIZE BUFFER_SIZE * 64
  20. /*
  21.  * class CGameClient
  22.  */
  23. class CGameClient : public OnlineGameLib::Win32::CSocketClient
  24. {
  25. public:
  26. friend class CConnectManager;
  27. CGameClient(
  28. CConnectManager &refConnectManager,
  29. const OnlineGameLib::Win32::_tstring &addressToConnectServer,
  30. unsigned short portToConnectServer,
  31. size_t maxFreeBuffers,
  32. size_t bufferSize = 1024
  33. );
  34. CGameClient(
  35. CConnectManager &refConnectManager,
  36. size_t maxFreeBuffers,
  37. size_t bufferSize = 1024
  38. );
  39. virtual ~CGameClient();
  40. private:
  41. virtual SOCKET CreateConnectionSocket( 
  42. const OnlineGameLib::Win32::_tstring &addressToConnectServer,
  43. unsigned short port);
  44. virtual void OnStartConnections();
  45. virtual void OnStopConnections();
  46. virtual void OnShutdownInitiated();
  47. virtual void OnShutdownComplete();
  48. virtual void OnConnect();
  49. virtual void OnClose();
  50. virtual void ReadCompleted( OnlineGameLib::Win32::CIOBuffer *pBuffer );
  51. virtual void OnError( const OnlineGameLib::Win32::_tstring &message );
  52. virtual void PreWrite( 
  53. OnlineGameLib::Win32::CIOBuffer *pBuffer, 
  54. const char *pData, 
  55. size_t dataLength );
  56. CConnectManager &m_theConnectManager;
  57. // No copies do not implement
  58. CGameClient( const CGameClient &rhs );
  59. CGameClient &operator=( const CGameClient &rhs );
  60. };
  61. /*
  62.  * class CConnectManager
  63.  */
  64. class CConnectManager : public IClient, private OnlineGameLib::Win32::CIOBuffer::Allocator
  65. {
  66. public:
  67. STDMETHOD( Startup )( );
  68. STDMETHOD( Cleanup )( );
  69. STDMETHOD( ConnectTo )( 
  70. const char * const &pAddressToConnectServer,
  71. unsigned short usPortToConnectServer );
  72. STDMETHOD( RegisterMsgFilter )( CALLBACK_CLIENT_EVENT pfnEventNotify );
  73. STDMETHOD( SendPackToServer )( 
  74. const void * const pData,
  75. const size_t &datalength );
  76. STDMETHOD_( const void *, GetPackFromServer )( size_t &datalength );
  77. STDMETHOD( Shutdown )( );
  78. /*
  79.      *  IUnknown COM Interface Methods
  80.      */
  81.     STDMETHOD ( QueryInterface ) ( REFIID riid, void** ppv );
  82.     STDMETHOD_( ULONG, AddRef ) ( );
  83.     STDMETHOD_( ULONG, Release ) ( );
  84. public:
  85. CConnectManager( size_t maxFreeBuffers, size_t bufferSize = 1024);
  86. virtual ~CConnectManager();
  87. void ServerConnected();
  88. void ServerDisConnected();
  89. void RecvFromServer( const char *pData, size_t dataLength );
  90. protected:
  91. size_t GetMinimumMessageSize() const;
  92. size_t GetMessageSize( const OnlineGameLib::Win32::CIOBuffer *pBuffer ) const;
  93. OnlineGameLib::Win32::CIOBuffer *ProcessDataStream(
  94. OnlineGameLib::Win32::CIOBuffer *pBuffer);
  95. void ProcessCommand( const OnlineGameLib::Win32::CIOBuffer *pBuffer);
  96. private:
  97. LONG m_lRefCount;
  98. CALLBACK_CLIENT_EVENT m_pfnCallbackClientEvent;
  99. OnlineGameLib::Win32::CCriticalSection m_csReadAction;
  100. OnlineGameLib::Win32::CIOBuffer *m_pRecvBuffer;
  101. OnlineGameLib::Win32::CIOBuffer *m_pReadBuffer;
  102. friend class CGameClient;
  103. CGameClient m_theGameClient;
  104. };
  105. #endif // __INCLUDE_CLIENTSTAGE_H__