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

模拟服务器

开发平台:

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 "SocketClient.h"
  14. #include "tstring.h"
  15. #include "Event.h"
  16. #include "InterfaceRainbowInterface.h"
  17. #include "InterfaceIClient.h"
  18. /*
  19.  * class CGameClient
  20.  */
  21. class CGameClient : public IClient, public OnlineGameLib::Win32::CSocketClient
  22. {
  23. public:
  24. STDMETHOD( Startup )( );
  25. STDMETHOD( Cleanup )( );
  26. STDMETHOD( ConnectTo )( const char * const &pAddressToConnectServer,
  27. unsigned short usPortToConnectServer );
  28. STDMETHOD( RegisterMsgFilter )( LPVOID lpParam,
  29. CALLBACK_CLIENT_EVENT pfnEventNotify );
  30. STDMETHOD( SendPackToServer )( const void * const pData,
  31. const size_t &datalength );
  32. STDMETHOD_( const void *, GetPackFromServer )( size_t &datalength );
  33. STDMETHOD( Shutdown )( );
  34. /*
  35.      *  IUnknown COM Interface Methods
  36.      */
  37.     STDMETHOD ( QueryInterface ) ( REFIID riid, void** ppv );
  38.     STDMETHOD_( ULONG, AddRef ) ( );
  39.     STDMETHOD_( ULONG, Release ) ( );
  40. public:
  41. CGameClient( size_t maxFreeBuffers, 
  42. size_t maxFreeBuffers_Cache,
  43. size_t bufferSize_Cache = 8192,
  44. size_t bufferSize = 1024 );
  45. virtual ~CGameClient();
  46. protected:
  47. size_t GetMinimumMessageSize() const;
  48. size_t GetMessageSize( const OnlineGameLib::Win32::CIOBuffer *pBuffer ) const;
  49. OnlineGameLib::Win32::CIOBuffer *ProcessDataStream(
  50. OnlineGameLib::Win32::CIOBuffer *pBuffer);
  51. void ProcessCommand( const OnlineGameLib::Win32::CIOBuffer *pBuffer);
  52. private:
  53. virtual void OnStartConnections();
  54. virtual void OnStopConnections();
  55. virtual void ReadCompleted( OnlineGameLib::Win32::CIOBuffer *pBuffer );
  56. private:
  57. LONG m_lRefCount;
  58. OnlineGameLib::Win32::CIOBuffer::Allocator m_theCacheAllocator;
  59. LPVOID m_lpCallBackParam;
  60. CALLBACK_CLIENT_EVENT m_pfnCallbackClientEvent;
  61. OnlineGameLib::Win32::CCriticalSection m_csReadAction;
  62. OnlineGameLib::Win32::CIOBuffer *m_pRecvBuffer;
  63. OnlineGameLib::Win32::CIOBuffer *m_pReadBuffer;
  64. /*
  65.  * No copies do not implement
  66.  */
  67. CGameClient( const CGameClient &rhs );
  68. CGameClient &operator=( const CGameClient &rhs );
  69. };
  70. /*
  71.  * CClientFactory
  72.  */
  73. class CClientFactory : public IClientFactory
  74. {
  75. public:
  76. STDMETHOD( SetEnvironment )
  77. (
  78. const size_t &bufferSize
  79. );
  80. STDMETHOD( CreateClientInterface )
  81. (
  82. REFIID riid,
  83. void** ppv
  84. );
  85. /*
  86.      *  IUnknown COM Interface Methods
  87.      */
  88.     STDMETHOD ( QueryInterface ) ( REFIID riid, void** ppv );
  89.     STDMETHOD_( ULONG, AddRef ) ( );
  90.     STDMETHOD_( ULONG, Release ) ( );
  91. public:
  92. CClientFactory();
  93. virtual ~CClientFactory();
  94. private:
  95. long m_lRefCount;
  96. size_t m_bufferSize;
  97. };
  98. #endif // __INCLUDE_CLIENTSTAGE_H__