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

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/05/11
  3. file base: GameServer
  4. file ext: h
  5. author: liupeng
  6. purpose:
  7. *********************************************************************/
  8. #ifndef __INCLUDE_GAMESERVER_H__
  9. #define __INCLUDE_GAMESERVER_H__
  10. #include "Buffer.h"
  11. #include "IGServer.h"
  12. #include "KProtocol.h"
  13. #include "IClient.h"
  14. #include "RainbowInterface.h"
  15. #include "IServer.h"
  16. #include "HeavenInterface.h"
  17. #include "CriticalSection.h"
  18. #include "Event.h"
  19. #include "KProtocolDef.h"
  20. #include <map>
  21. #include <list>
  22. /*
  23.  * class CGameServer
  24.  */
  25. class CGameServer : public IGServer
  26. {
  27. public:
  28. typedef struct tagNetworkInterface
  29. {
  30. IServer *pServer;
  31. IClient *pClient;
  32. HWND hwndContainer;
  33. }NI, NEAR *PNI, FAR *LPNI;
  34. CGameServer( IServer *pGameSvrServer, 
  35. IClient *pAccountClient,
  36. UINT nIdentityID = ( UINT )( -1 ) );
  37. virtual ~CGameServer();
  38. virtual bool Create();
  39. virtual bool Destroy();
  40. virtual bool Attach( const char *pAccountName );
  41. virtual void SendText( const char *pText, int nLength, UINT uOption );
  42. virtual bool AnalyzeRequire( const void *pData, size_t datalength );
  43. enum enumTask
  44. {
  45. enumTaskProtocol = 0x5,
  46. enumSyncRoleInfo,
  47. enumPlayerLogicLogout,
  48. };
  49. virtual bool DispatchTask( UINT nTask, const void *pData, size_t datalength, WORD nData);
  50. static bool SetupGlobalAllocator( size_t bufferSize, size_t maxFreeBuffers );
  51. static void __stdcall GameSvrEventNotify( LPVOID lpParam,
  52. const unsigned long &ulnID,
  53. const unsigned long &ulnEventType );
  54. static bool Begin( IServer *pGameSvrServer );
  55. static void End();
  56. static void SendToAll( const char *pText, int nLength, UINT uOption );
  57. static IGServer *QueryServer( UINT nMapID );
  58. static IGServer *GetServer( size_t nID );
  59. virtual size_t GetID() { return m_lnIdentityID; };
  60. virtual size_t GetContent();
  61. virtual size_t GetCapability() { return m_dwCapability; };
  62. virtual size_t GetIP( BYTE cType ) { if ( INTERNET_IP == cType ) { return m_nServerIP_Internet; } return m_nServerIP_Intraner; };
  63. virtual size_t GetIndentify() { return m_lnIdentityID; };
  64. protected:
  65. bool _QueryMapID();
  66. bool _QueryGameSvrInfo();
  67. bool _RegisterAccount( const void *pData, size_t datalength );
  68. bool _UpdateMapID( const void *pData, size_t datalength );
  69. bool _UpdateGameSvrInfo( const void *pData, size_t datalength );
  70. bool _NotifyPlayerLogin( const void *pData, size_t datalength );
  71. bool _NotifyEnterGame( const void *pData, size_t datalength );
  72. bool _NotifyLeaveGame( const void *pData, size_t datalength );
  73. bool _RequestSvrIP( const void *pData, size_t datalength );
  74. bool _SyncRoleInfo( const void *pData, size_t datalength, WORD nData);
  75. bool _PlayerLogicLogout( const void *pData, size_t datalength );
  76. bool LargePackProcess( BYTE cProtocol, const void *pData, size_t datalength );
  77. bool SmallPackProcess( BYTE cProtocol, const void *pData, size_t datalength );
  78. bool PushAccount( const char *pAccountName );
  79. bool PopAccount( const char *pAccountName, bool bUnlockAccount, WORD nExtPoint);
  80. bool ConsumeMoney( const char *pAccountName );
  81. bool FreezeMoney( const char *pAccountName, WORD nExtPoint );
  82. private:
  83. /*
  84.  * Map ID convert to a game server index
  85.  */
  86. static OnlineGameLib::Win32::CCriticalSection m_csMapIDAction;
  87. typedef std::list< IGServer * > stdServerList;
  88. typedef std::map< size_t, stdServerList > stdMapIDConvert;
  89. static stdMapIDConvert m_theMapIDConvert;
  90. static bool RegisterServer( UINT nID, IGServer *pGServer );
  91. /*
  92.  * Process protocol function
  93.  */
  94. typedef bool ( CGameServer::*ProcessProtocolFun[c2s_end] )( const void *pData, size_t datalength );
  95. ProcessProtocolFun m_theProcessProtocolFun;
  96. private:
  97. static OnlineGameLib::Win32::CBuffer::Allocator m_theGlobalAllocator;
  98. static LONG m_slnIdentityCounts;
  99. LONG m_lnIdentityID;
  100. IServer *m_pGameSvrServer;
  101. // IClient *m_pAccountClient;
  102. OnlineGameLib::Win32::CPackager m_thePackager;
  103. OnlineGameLib::Win32::_tstring m_sServerIPAddr_Intraner;
  104. OnlineGameLib::Win32::_tstring m_sServerIPAddr_Internet;
  105. unsigned long m_nServerIP_Intraner;
  106. unsigned long m_nServerIP_Internet;
  107. unsigned short m_nServerPort;
  108. DWORD m_dwCapability;
  109. /*
  110.  * Listen and accept data from network
  111.  */
  112. static OnlineGameLib::Win32::CEvent m_shQuitEvent;
  113. static OnlineGameLib::Win32::CEvent m_shStartupManagerThreadEvent;
  114. static HANDLE m_shManagerThread;
  115. static DWORD WINAPI ManagerThreadFunction( void *pParam );
  116. /*
  117.  * Game server information
  118.  */
  119. static OnlineGameLib::Win32::CCriticalSection m_csGameSvrAction;
  120. typedef std::map< size_t, IGServer * > stdGameSvr;
  121. static stdGameSvr m_theGameServers;
  122. /*
  123.  * Somebody attach the gameserver be save in this table
  124.  */
  125. OnlineGameLib::Win32::CCriticalSection m_csAITS;
  126. typedef std::map< std::string, void * > stdAccountAttachIn;
  127. stdAccountAttachIn m_theAccountInThisServer;
  128. bool AttatchAccountToGameServer( const char *pAccountName );
  129. bool HaveAccountInGameServer( const char *pAccountName );
  130. bool DetachAccountFromGameServer( const char *pAccountName );
  131. };
  132. #endif // __INCLUDE_GAMESERVER_H__