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

模拟服务器

开发平台:

C/C++

  1. // ChannelMgr.h: interface for the CChannelMgr class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_CHANNELMGR_H__513C195F_C7DE_4591_A165_EF0FF2087213__INCLUDED_)
  5. #define AFX_CHANNELMGR_H__513C195F_C7DE_4591_A165_EF0FF2087213__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include <map>
  10. #include <list>
  11. class CChannelMgr  
  12. {
  13. public:
  14. CChannelMgr();
  15. virtual ~CChannelMgr();
  16. public:
  17. BOOL Initialize();
  18. BOOL Uninitialize();
  19. public:
  20. BOOL B_QueryChannelID(const std::_tstring& channel, DWORD ip, unsigned long param, DWORD nameid);
  21. BOOL B_Subscribe(DWORD ip, unsigned long param, DWORD channelid);
  22. BOOL B_Unsubscribe(DWORD ip, unsigned long param, DWORD channelid);
  23. BOOL B_FreeChannID(DWORD channid, DWORD ip, unsigned long param);
  24. BOOL B_ClearPlayer(DWORD ip, unsigned long param);
  25. BOOL QueryChannelID(const std::_tstring& channel, DWORD ip, unsigned long param, DWORD nameid);
  26. BOOL Subscribe(DWORD ip, unsigned long param, DWORD channelid);
  27. BOOL Unsubscribe(DWORD ip, unsigned long param, DWORD channelid);
  28. BOOL FreeChannID(DWORD channid, DWORD ip, unsigned long param);
  29. BOOL ClearPlayer(DWORD ip, unsigned long param);
  30. DWORD DoBlockOp(DWORD lmt);
  31. BOOL IsUsed(DWORD ip, unsigned long param, DWORD channid);
  32. BOOL IsSubscribed(DWORD ip, unsigned long param, DWORD channid);
  33. BOOL GmQueryChannelID(const std::_tstring& channel, BOOL force);
  34. BOOL GmFreeChannID(DWORD channid);
  35. BOOL IsGmUsed(DWORD channid);
  36. BOOL GmSubscribe(DWORD channid);
  37. BOOL GmUnsubscribe(DWORD channid);
  38. BOOL IsGmSubscribed(DWORD channid);
  39. std::_tstring GetChannelName(DWORD channelid, BOOL adv = FALSE);
  40. DWORD GetChannelID(const std::_tstring& channname, DWORD advIP = 0);
  41. public:
  42. std::_tstring MakeChannelName(const std::_tstring& chann, DWORD ip);
  43. std::_tstring ReduceChannelName(const std::_tstring& chann);
  44. DWORD ParseChannelName(const std::_tstring& chann, DWORD* pIP);
  45. BYTE GainPreCost(const std::_tstring& channel);
  46. DWORD GetGMChannID();
  47. BOOL IsGodChannel(DWORD channid);
  48. BOOL IsStockChannel(DWORD channid);
  49. private:
  50. enum {
  51. defCHANN_esc = '\',
  52. defCHANN_splt = ':',
  53. defCHANN_TEAM = 'T',
  54. defCHANN_FAC = 'F',
  55. defCHANN_TONG = 'O',
  56. defCHANN_SCRN = 'S',
  57. defCHANN_BC = 'B',
  58. };
  59. TCHAR m_chChannEsc;
  60. TCHAR m_chChannSplt;
  61. TCHAR m_chChannTEAM;
  62. TCHAR m_chChannFAC;
  63. TCHAR m_chChannTONG;
  64. TCHAR m_chChannSCRN;
  65. TCHAR m_chChannBC;
  66. private:
  67. DWORD GenChannID();
  68. BOOL IsNeedRelegate(const std::_tstring& channname, BOOL filter);
  69. BOOL PassToGM(const void* pData, size_t size);
  70. BOOL PassToSpecMan(DWORD ToIP, unsigned long ToRelayID, DWORD ToNameID, const void* pData, size_t size);
  71. typedef std::list<tagPlusSrcInfo> MANLIST;
  72. BOOL PassToGroupMan(DWORD ToIP, BOOL verify, const MANLIST& mans, const void* pData, size_t size);
  73. private:
  74. BOOL IsValidTeamID(DWORD idTeam);
  75. BOOL IsValidFacID(DWORD idFac);
  76. BOOL IsValidTongID(DWORD idTong);
  77. private:
  78. DWORD m_lastChannID;
  79. DWORD m_channidGM;
  80. struct PLAYERINFO
  81. {
  82. DWORD nameid;
  83. BOOL subed;
  84. };
  85. typedef std::map<unsigned long, PLAYERINFO> PLAYERSMAP;
  86. typedef std::map<DWORD, PLAYERSMAP> IP2PLAYERSMAP;
  87. struct CHANNINFO
  88. {
  89. BOOL god;
  90. BOOL stock;
  91. std::_tstring channname;
  92. IP2PLAYERSMAP mapIp2Players;
  93. BOOL gmuse;
  94. BOOL gmsub;
  95. BYTE cost; //
  96. };
  97. typedef std::map<DWORD, CHANNINFO> CHANNID2INFOMAP;
  98. CHANNID2INFOMAP m_mapChannid2Info;
  99. typedef std::map<std::_tstring, DWORD, _tstring_less> CHANN2IDMAP;
  100. CHANN2IDMAP m_mapChann2ID;
  101. DWORD m_minTeamID;
  102. DWORD m_maxTeamID;
  103. DWORD m_minFacID;
  104. DWORD m_maxFacID;
  105. DWORD m_minTongID;
  106. DWORD m_maxTongID;
  107. BYTE m_defCost;
  108. BYTE m_costTeam;
  109. BYTE m_costFac;
  110. BYTE m_costTong;
  111. BYTE m_costScrn;
  112. BYTE m_costBc;
  113. CLockMRSW m_lockChannel;
  114. public:
  115. BOOL SomeoneChat(DWORD srcIP, const tagPlusSrcInfo& SrcInfo, const CHAT_SOMEONECHAT_CMD* pSomeoneChatCmd);
  116. BOOL ChannelChat(DWORD srcIP, const tagPlusSrcInfo& SrcInfo, const CHAT_CHANNELCHAT_CMD* pChannelChatCmd);
  117. public:
  118. BOOL SayOnSomeone(DWORD ip, unsigned long param, DWORD nameid, const std::_tstring& name, const std::_tstring& sent);
  119. BOOL SayOnChannel(DWORD channid, BOOL filter, const std::_tstring& ids, const std::_tstring& name, const std::_tstring& sent);
  120. private:
  121. struct _BLOCKCHANNELOP
  122. {
  123. enum {
  124. op_querychannelid,
  125. op_subscribe,
  126. op_unsubscribe,
  127. op_freechannelid,
  128. op_clearplayer,
  129. } opr;
  130. unsigned long param;
  131. };
  132. struct BLOCKCHANNELOP_QID : _BLOCKCHANNELOP //querychannelid
  133. {
  134. std::_tstring channelname;
  135. DWORD nameid;
  136. };
  137. std::allocator<BLOCKCHANNELOP_QID> m_allcQID;
  138. struct BLOCKCHANNELOP_CMN : _BLOCKCHANNELOP //(un)subscribe, freechannelid
  139. {
  140. DWORD channelid;
  141. };
  142. std::allocator<BLOCKCHANNELOP_CMN> m_allcCMN;
  143. struct BLOCKCHANNELOP_CLR : _BLOCKCHANNELOP //clearplayer
  144. {
  145. };
  146. std::allocator<BLOCKCHANNELOP_CLR> m_allcCLR;
  147. typedef std::list<_BLOCKCHANNELOP*> BLOCKOPLIST;
  148. typedef std::map<DWORD, BLOCKOPLIST> IP2OPSMAP;
  149. IP2OPSMAP m_mapIp2Ops;
  150. CLockMRSW m_lockBlockOp;
  151. private:
  152. BOOL Block_QueryChannelID(const std::_tstring& channel, DWORD ip, unsigned long param, DWORD nameid);
  153. BOOL Block_FreeChannID(DWORD channid, DWORD ip, unsigned long param);
  154. BOOL Block_Subscribe(DWORD ip, unsigned long param, DWORD channelid);
  155. BOOL Block_Unsubscribe(DWORD ip, unsigned long param, DWORD channelid);
  156. BOOL Block_ClearPlayer(DWORD ip, unsigned long param);
  157. public:
  158. size_t GetChannelCount();
  159. };
  160. #endif // !defined(AFX_CHANNELMGR_H__513C195F_C7DE_4591_A165_EF0FF2087213__INCLUDED_)