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

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/05/15
  3. file base: Player
  4. file ext: h
  5. author: liupeng
  6. purpose:
  7. *********************************************************************/
  8. #ifndef __INCLUDE_PLAYER_H__
  9. #define __INCLUDE_PLAYER_H__
  10. #include "tstring.h"
  11. #include "Thread.h"
  12. #include "Event.h"
  13. #include "Buffer.h"
  14. #include "Library.h"
  15. #include "IClient.h"
  16. #include "RainbowInterface.h"
  17. #include "CriticalSection.h"
  18. class IPlayer
  19. {
  20. public:
  21. virtual bool ConnectToGateway() = 0;
  22. virtual ~IPlayer(){};
  23. };
  24. class CPlayer : public IPlayer, protected OnlineGameLib::Win32::CThread
  25. {
  26. public:
  27. explicit CPlayer( const char *pSrvIP, unsigned short nPort, const char *pAccName );
  28. virtual ~CPlayer();
  29. virtual bool ConnectToGateway();
  30. using CThread::Start;
  31. protected:
  32. void Free();
  33. void LoginGateway();
  34. void ProcessGateway();
  35. void ProcessGatewayMsg();
  36. void ProcessGatewayLoop();
  37. void ProcessGameSvr();
  38. void ProcessGameSvrMsg();
  39. void ProcessGameSvrLoop();
  40. bool ReConnectGateway();
  41. bool ConnectToGameSvr( const char *pIPAddr, unsigned short nPort, GUID &guid );
  42. void ShutdownGateway();
  43. void ShutdownGameSvr();
  44. bool OnAccountLoginNotify(const char* pMsg);
  45. bool OnPlayerLoginNotify(const char* pMsg);
  46. int  OnGetRoleList(const char* pMsg);
  47. void SyncEnd();
  48. void SpeakWord( const char *pText, size_t size /*0*/ );
  49. void WalkTo();
  50. void NotifyRobotManager();
  51. virtual int Run();
  52. static void __stdcall ClientEventNotify( LPVOID lpParam, const unsigned long &ulnEventType );
  53. void _ClientEventNotify( const unsigned long &ulnEventType );
  54. typedef HRESULT ( __stdcall * pfnCreateClientInterface )( REFIID riid, void **ppv );
  55. static OnlineGameLib::Win32::CLibrary s_theRainbowLib;
  56. // 控制线程的退出的事件
  57. OnlineGameLib::Win32::CEvent m_hQuit;
  58. private:
  59. IClient *m_pClientToGateWay;
  60. IClient *m_pClientToGameSvr;
  61. const OnlineGameLib::Win32::_tstring m_sGatewayIP;
  62. const unsigned short m_nGatewayPort;
  63. const OnlineGameLib::Win32::_tstring m_sAccName; // 帐号的名字,密码的名字,和角色的名字是一致的
  64. enum
  65. {
  66. enumSleep = 0x10, // 还未启动网络
  67. enumStartup, // 启动网络
  68. enumConnectToGateway, // 开始连接网关
  69. enumConnectToGatewaySucess, // 连接网关成功
  70. enumGetRoleList, // 从网关得到角色列表
  71. enumConnectToGameSvr, // 从网关得到加入游戏服务器的通告
  72. enumPlayGame // 初始同步结束,开始游戏
  73. };
  74. void SetStatus( LONG nStatus ) { ::InterlockedExchange( const_cast< LONG * >( &m_nStatus ), nStatus ); }
  75. LONG GetStatus() { return ::InterlockedExchange( const_cast< LONG * >( &m_nStatus ), m_nStatus ); }
  76. const LONG m_nStatus;
  77. static DWORD m_dwTargetID;
  78. DWORD m_dwID;
  79. POINT m_ptCurPos;
  80. POINT m_ptTagPos;
  81. };
  82. using OnlineGameLib::Win32::CCriticalSection;
  83. extern CCriticalSection g_csPlayerList;
  84. #endif // __INCLUDE_PLAYER_H__