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

模拟服务器

开发平台:

C/C++

  1. // KRoleInfomation.cpp: implementation of the KRoleInfomation class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "KRoleInfomation.h"
  6. #include "kdbprocessthread.h"
  7. #include "kroledbheader.h"
  8. #include "KDBProcessThread.h"
  9. #include <objbase.h>
  10. #include <initguid.h>
  11. #include <list>
  12. #include <map>
  13. extern char * GetRoleNameFromRoleBuffer(char * pRoleBuffer);
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char THIS_FILE[]=__FILE__;
  17. //#define new DEBUG_NEW
  18. #endif
  19. using namespace std;
  20. using OnlineGameLib::Win32::CCriticalSection;
  21. //按照角色登入的顺序存入的玩家列表,用于自动保存的顺序
  22. list<KRoleInfomation * > g_RoleInfoList;
  23. //以角色姓名作为关键名,存放玩家的列表,用于在客户端读取档快速检索
  24. map<OnlineGameLib::Win32::_tstring, KRoleInfomation * > g_RoleInfoMap;
  25. //////////////////////////////////////////////////////////////////////
  26. // Construction/Destruction
  27. //////////////////////////////////////////////////////////////////////
  28. KRoleInfomation::KRoleInfomation()
  29. {
  30. Clear();
  31. }
  32. KRoleInfomation::~KRoleInfomation()
  33. {
  34. Clear();
  35. }
  36. void KRoleInfomation::Clear()
  37. {
  38. CCriticalSection::Owner locker( m_cs);
  39. m_nRoleInfoSize = 0;
  40. m_nSaveCmdCount = m_nLoadCmdCount = m_nSaveDBCount = m_bModify = 0;
  41. m_nLastSaveTime = 0;
  42. m_nUnModifyTime = 0;
  43. m_bModify = false;
  44. }
  45. BOOL KRoleInfomation::IsValid()
  46. {
  47. CCriticalSection::Owner locker( m_cs);
  48. if (m_nRoleInfoSize == 0) return FALSE;
  49. return TRUE;
  50. }
  51. TCmd * KRoleInfomation::CreateRoleInfoTCmdData(size_t &nRoleInfoSize)
  52. {
  53. CCriticalSection::Owner locker( m_cs);
  54. if (m_nRoleInfoSize == 0 ) return NULL;
  55. TCmd * pNewCmd = (TCmd *)new BYTE[sizeof(TCmd) + m_nRoleInfoSize - 1];
  56. pNewCmd->ProcessData.nDataLen = m_nRoleInfoSize;
  57. nRoleInfoSize = m_nRoleInfoSize;
  58. memcpy(&pNewCmd->ProcessData.pDataBuffer[0], m_RoleInfoBuffer, m_nRoleInfoSize);
  59. return pNewCmd;
  60. }
  61. BYTE * KRoleInfomation::GetRoleInfoBuffer(size_t & nRoleInfoSize)
  62. {
  63. CCriticalSection::Owner locker( m_cs);
  64. nRoleInfoSize = 0;
  65. if (m_nRoleInfoSize == 0) return NULL;
  66. nRoleInfoSize = m_nRoleInfoSize;
  67. return m_RoleInfoBuffer ;
  68. }
  69. BOOL KRoleInfomation::GetRoleName(char * pName, size_t& nLen)
  70. {
  71. CCriticalSection::Owner locker(m_cs);
  72. if (m_nRoleInfoSize == 0) return FALSE;
  73. size_t nCurLen = strlen(GetRoleNameFromRoleBuffer((char *)m_RoleInfoBuffer));
  74. if (nCurLen >= nLen)
  75. return FALSE;
  76. nLen = nCurLen;
  77. strcpy(pName, GetRoleNameFromRoleBuffer((char *)m_RoleInfoBuffer));
  78. return TRUE;
  79. }
  80. BOOL KRoleInfomation::CopyRoleInfoBuffer(BYTE * pBuffer ,size_t & nRoleInfoSize)
  81. {
  82. CCriticalSection::Owner locker( m_cs);
  83. if (nRoleInfoSize < m_nRoleInfoSize) return FALSE;
  84. nRoleInfoSize = 0;
  85. if (m_nRoleInfoSize == 0) return FALSE;
  86. nRoleInfoSize = m_nRoleInfoSize;
  87. memcpy(pBuffer, m_RoleInfoBuffer, m_nRoleInfoSize);
  88. return TRUE ;
  89. }
  90. BOOL KRoleInfomation::GetBaseRoleInfo(TRoleBaseInfo * pRoleBaseInfo)
  91. {
  92. CCriticalSection::Owner locker(m_cs);
  93. if (!pRoleBaseInfo ) return FALSE;
  94. if (m_nRoleInfoSize == 0) return FALSE;
  95. TRoleBaseInfo * pInfo = (TRoleBaseInfo *) m_RoleInfoBuffer;
  96. *pRoleBaseInfo = *pInfo;
  97. return TRUE;
  98. }
  99. size_t KRoleInfomation::GetBufferSize()
  100. {
  101. CCriticalSection::Owner locker( m_cs);
  102. return m_nRoleInfoSize;
  103. }
  104. BOOL KRoleInfomation::SetRoleInfoBuffer(BYTE * pRoleInfoBuffer, size_t nRoleInfoSize)
  105. {
  106. CCriticalSection::Owner locker( m_cs);
  107. if (pRoleInfoBuffer == NULL || nRoleInfoSize == 0 ) return FALSE;
  108. if (nRoleInfoSize > MAX_ROLEINFORMATION_SIZE) return FALSE;
  109. memcpy((BYTE*)m_RoleInfoBuffer, pRoleInfoBuffer, nRoleInfoSize);
  110. m_nRoleInfoSize = nRoleInfoSize;
  111. m_bModify = true;
  112. return TRUE;
  113. }
  114. BOOL KRoleInfomation::CheckRoleInfoValid(const char * szRoleName) //验证Buffer数据是否为RoleName的数据
  115. {
  116. return TRUE;
  117. }
  118. BOOL KRoleInfomation::CheckRoleInfoValid() //验证Buffer数据是否为RoleName的数据
  119. {
  120. if (m_nRoleInfoSize <= 0) return FALSE;
  121. return TRUE;
  122. }
  123.