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

模拟服务器

开发平台:

C/C++

  1. // PlayerTrack.cpp: implementation of the CPlayerTrack class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "PlayerTrack.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CPlayerTrack::CPlayerTrack()
  10. {
  11. }
  12. CPlayerTrack::~CPlayerTrack()
  13. {
  14. }
  15. BOOL CPlayerTrack::Initialize()
  16. {
  17. Clearup();
  18. return TRUE;
  19. }
  20. BOOL CPlayerTrack::Uninitialize()
  21. {
  22. return FALSE;
  23. }
  24. BOOL CPlayerTrack::Clearup()
  25. {
  26. m_csAccess.Lock();
  27. m_mapAcc.clear();
  28. //m_mapRole.clear();
  29. m_mapConn.clear();
  30. m_csAccess.Unlock();
  31. return TRUE;
  32. }
  33. BOOL CPlayerTrack::Login(const std::_tstring& acc, const std::_tstring& role, DWORD nameid, unsigned long conn, int idx)
  34. {
  35. assert(!acc.empty() && !role.empty());
  36. m_csAccess.Lock();
  37. ACCVALUE accval;
  38. accval.role = role;
  39. accval.nameid = nameid;
  40. accval.conn = conn;
  41. accval.index = idx;
  42. m_mapAcc.insert(ACCMAP::value_type(acc, accval));
  43. /*
  44. ROLEVALUE roleval;
  45. roleval.acc = acc;
  46. roleval.nameid = nameid;
  47. roleval.conn = conn;
  48. roleval.index = idx;
  49. m_mapRole.insert(ROLEMAP::value_type(role, roleval));
  50. */
  51. PLAYERSET& rPlys = m_mapConn[conn];
  52. PLAYERVALUE plyval;
  53. plyval.acc = acc;
  54. plyval.role = role;
  55. plyval.nameid = nameid;
  56. plyval.index = idx;
  57. rPlys.insert(plyval);
  58. m_csAccess.Unlock();
  59. return TRUE;
  60. }
  61. BOOL CPlayerTrack::Logout(const std::_tstring& acc)
  62. {
  63. assert(!acc.empty());
  64. m_csAccess.Lock();
  65. ACCMAP::iterator itAcc = m_mapAcc.find(acc);
  66. if (itAcc != m_mapAcc.end())
  67. {
  68. ACCVALUE accval = (*itAcc).second;
  69. m_mapAcc.erase(itAcc);
  70. //m_mapRole.erase(accval.role);
  71. CONNMAP::iterator itConn = m_mapConn.find(accval.conn);
  72. if (itConn != m_mapConn.end())
  73. {
  74. PLAYERSET& rPlys = (*itConn).second;
  75. PLAYERVALUE plyval;
  76. plyval.acc = acc;
  77. plyval.role = accval.role;
  78. plyval.nameid = accval.nameid;
  79. plyval.index = accval.index;
  80. rPlys.erase(plyval);
  81. //erase rPlys ???
  82. if (rPlys.empty())
  83. m_mapConn.erase(itConn);
  84. }
  85. }
  86. m_csAccess.Unlock();
  87. return TRUE;
  88. }
  89. BOOL CPlayerTrack::ClearOnSvr(unsigned long conn)
  90. {
  91. m_csAccess.Lock();
  92. CONNMAP::iterator itConn = m_mapConn.find(conn);
  93. if (itConn != m_mapConn.end())
  94. {
  95. PLAYERSET& rPlys = (*itConn).second;
  96. for (PLAYERSET::iterator it = rPlys.begin(); it != rPlys.end(); it++)
  97. {
  98. m_mapAcc.erase((*it).acc);
  99. //m_mapRole.erase((*it).role);
  100. }
  101. m_mapConn.erase(itConn);
  102. }
  103. m_csAccess.Unlock();
  104. return TRUE;
  105. }