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

模拟服务器

开发平台:

C/C++

  1. // FriendMgr.h: interface for the CFriendMgr class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_FRIENDMGR_H__FC02470F_E921_4A06_8D80_0073F81DB6D9__INCLUDED_)
  5. #define AFX_FRIENDMGR_H__FC02470F_E921_4A06_8D80_0073F81DB6D9__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include <map>
  10. #include "DBTable.h"
  11. #include <list>
  12. #include <vector>
  13. class CFriendMgr  
  14. {
  15. public:
  16. CFriendMgr();
  17. virtual ~CFriendMgr();
  18. public:
  19. BOOL Initialize();
  20. BOOL Uninitialize();
  21. public:
  22. BOOL SomeoneLogin(const std::string& role);
  23. BOOL SomeoneLogout(const std::string& role);
  24. BOOL SomeoneSyncFriends(const std::string& role, unsigned long param, DWORD nameid, const CNetConnectDup& conndup, BOOL full, BYTE pckgid);
  25. BOOL PlayerAddFriend(const std::_tstring& someone, const std::_tstring& dst);
  26. BOOL PlayerDelFriend(const std::_tstring& someone, const std::_tstring& dst);
  27. BOOL PlayerIsFriend(const std::_tstring& someone, const std::_tstring& dst, BOOL rev = FALSE);
  28. BOOL SetFriendGroup(const std::_tstring& someone, const std::_tstring& dst, const std::_tstring& group);
  29. std::_tstring GetFriendGroup(const std::_tstring& someone, const std::_tstring& dst);
  30. private:
  31. CLockMRSW m_lockFriend;
  32. UINT m_elapseUpdateDB;
  33. size_t m_StorePlayerPerUdtDB;
  34. size_t m_LoadPlayerPerUdtDB;
  35. struct FRIENDINFO
  36. {
  37. std::_tstring group;
  38. bool cheating;
  39. bool* pCheated;
  40. enum {cheatNONE = -1, cheatFALSE = 0, cheatTRUE = 1} orig_cheating, orig_cheated; //is valid when !-1 && loaded
  41. FRIENDINFO() : cheating(true), pCheated(NULL), orig_cheating(cheatNONE), orig_cheated(cheatNONE) {}
  42. };
  43. typedef std::map<std::_tstring, FRIENDINFO, _tstring_less> FRIENDSMAP;
  44. struct PLAYERINFO
  45. {
  46. BOOL loaded;
  47. BOOL dirty;
  48. FRIENDSMAP friends;
  49. PLAYERINFO() : loaded(FALSE), dirty(FALSE) {}
  50. };
  51. typedef std::map<std::_tstring, PLAYERINFO, _tstring_less> PLAYERSMAP;
  52. PLAYERSMAP m_mapPlayers;
  53. private:
  54. PLAYERSMAP::iterator _LoadSomeone(const std::_tstring& someone);
  55. BOOL _StoreSomeone(PLAYERSMAP::iterator itSomeone);
  56. private:
  57. struct ADDFRIENDKEY
  58. {
  59. BYTE pckgid;
  60. std::_tstring src;
  61. ADDFRIENDKEY() : pckgid(-1) {}
  62. ADDFRIENDKEY(BYTE pi, const std::_tstring& s) : pckgid(pi), src(s) {}
  63. bool operator<(const ADDFRIENDKEY& s) const
  64. {return pckgid < s.pckgid || (pckgid == s.pckgid && _tstring_less()(src, s.src));}
  65. };
  66. struct ADDFRIENDVALUE
  67. {
  68. std::_tstring dst;
  69. DWORD tick;
  70. };
  71. typedef std::map<ADDFRIENDKEY, ADDFRIENDVALUE> ADDFRIENDMAP;
  72. ADDFRIENDMAP m_mapAddFriends;
  73. DWORD m_tickLast;
  74. CLockMRSW m_lockAddFriend;
  75. public:
  76. BOOL TrackAddFriend(const std::_tstring& src, const std::_tstring& dst, BYTE id);
  77. BOOL ExtractAddFriend(const std::_tstring& src, const std::_tstring& dst, BYTE id);
  78. BOOL TidyAddFriend();
  79. private:
  80. CLockMRSW m_lockDB;
  81. ZDBTable m_dbFriend;
  82. CDBTableReadOnly m_dbFriendRO;
  83. struct MEM_FRIENDRECORD
  84. {
  85. std::_tstring name;
  86. std::_tstring group;
  87. bool cheating;
  88. bool cheated;
  89. };
  90. typedef std::list<MEM_FRIENDRECORD> MEM_FRIENDRECORDLIST;
  91. //Berkeley DB data
  92. #pragma pack(push, 1)
  93. struct _BASIC_STR
  94. {
  95. BYTE strlen;
  96. //char str[strlen];
  97. };
  98. struct DB_FRIENDRECORD
  99. {
  100. bool cheating;
  101. bool cheated;
  102. //_BASIC_STR name;
  103. //_BASIC_STR group;
  104. };
  105. struct DB_FRIENDRECORDLIST
  106. {
  107. BYTE count;
  108. //DB_FRIENDRECORD friends[count];
  109. };
  110. #pragma pack(pop)
  111. private:
  112. std::_tstring NameToDBKey(const std::_tstring& name);
  113. private:
  114. BOOL DB_AddSomeone(const std::_tstring& someone, const MEM_FRIENDRECORDLIST& memFriends);
  115. BOOL DB_DeleteSomeone(const std::_tstring& someone);
  116. BOOL DB_LoadSomeone(const std::_tstring& someone, MEM_FRIENDRECORDLIST* pmemFriends);
  117. BOOL DB_StoreSomeone(const std::_tstring& someone, const MEM_FRIENDRECORDLIST& memFriends);
  118. private:
  119. struct ONEPLAYER
  120. {
  121. std::_tstring someone;
  122. MEM_FRIENDRECORDLIST listFriends;
  123. };
  124. typedef std::list<ONEPLAYER> ONEPLAYERLIST;
  125. private:
  126. size_t m_cursorBkgrndUdtDB;
  127. public:
  128. BOOL BkgrndUpdateDB();
  129. public:
  130. size_t GetPlayerCount();
  131. size_t GetAFQSize();
  132. public:
  133. BOOL PlayerAssociate(const std::_tstring& someone, const std::_tstring& dst, const std::_tstring& group, BYTE bidir);
  134. typedef std::vector<std::_tstring> _BEVY;
  135. BOOL PlayerAssociateBevy(const _BEVY& bevy, const std::_tstring& group);
  136. };
  137. #endif // !defined(AFX_FRIENDMGR_H__FC02470F_E921_4A06_8D80_0073F81DB6D9__INCLUDED_)