诸暨麻将添加redis
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

283 řádky
8.1 KiB

  1. #include "StdAfx.h"
  2. #include "ModuleDBParameter.h"
  3. #include "ModuleInfoManager.h"
  4. //////////////////////////////////////////////////////////////////////////////////
  5. //构造函数
  6. CModuleInfoBuffer::CModuleInfoBuffer()
  7. {
  8. }
  9. //析构函数
  10. CModuleInfoBuffer::~CModuleInfoBuffer()
  11. {
  12. //变量定义
  13. WORD wModuleID = 0;
  14. tagGameModuleInfo * pGameModuleInfo = NULL;
  15. POSITION Position = m_GameModuleInfoMap.GetStartPosition();
  16. //删除索引
  17. while (Position != NULL)
  18. {
  19. m_GameModuleInfoMap.GetNextAssoc(Position, wModuleID, pGameModuleInfo);
  20. SafeDelete(pGameModuleInfo);
  21. }
  22. //删除数组
  23. for (INT_PTR i = 0; i < m_GameModuleInfoArray.GetCount(); i++)
  24. {
  25. pGameModuleInfo = m_GameModuleInfoArray[i];
  26. SafeDelete(pGameModuleInfo);
  27. }
  28. //删除引用
  29. m_GameModuleInfoMap.RemoveAll();
  30. m_GameModuleInfoArray.RemoveAll();
  31. return;
  32. }
  33. //重置数据
  34. bool CModuleInfoBuffer::ResetModuleInfo()
  35. {
  36. //变量定义
  37. WORD wModuleID = 0;
  38. tagGameModuleInfo * pGameModuleInfo = NULL;
  39. POSITION Position = m_GameModuleInfoMap.GetStartPosition();
  40. //删除对象
  41. while (Position != NULL)
  42. {
  43. m_GameModuleInfoMap.GetNextAssoc(Position, wModuleID, pGameModuleInfo);
  44. m_GameModuleInfoArray.Add(pGameModuleInfo);
  45. }
  46. //删除索引
  47. m_GameModuleInfoMap.RemoveAll();
  48. return true;
  49. }
  50. //删除数据
  51. bool CModuleInfoBuffer::DeleteModuleInfo(WORD wModuleID)
  52. {
  53. //查找类型
  54. tagGameModuleInfo * pGameModuleInfo = NULL;
  55. if (m_GameModuleInfoMap.Lookup(wModuleID, pGameModuleInfo) == FALSE) return false;
  56. //删除数据
  57. m_GameModuleInfoMap.RemoveKey(wModuleID);
  58. m_GameModuleInfoArray.Add(pGameModuleInfo);
  59. //设置变量
  60. ZeroMemory(pGameModuleInfo, sizeof(tagGameModuleInfo));
  61. return true;
  62. }
  63. //插入数据
  64. bool CModuleInfoBuffer::InsertModuleInfo(tagGameModuleInfo * pGameModuleInfo)
  65. {
  66. //效验参数
  67. ASSERT(pGameModuleInfo != NULL);
  68. if (pGameModuleInfo == NULL) return false;
  69. //查找现存
  70. WORD wGameID = pGameModuleInfo->wGameID;
  71. tagGameModuleInfo * pGameModuleInsert = SearchModuleInfo(wGameID);
  72. //创建判断
  73. if (pGameModuleInsert == NULL)
  74. {
  75. //创建对象
  76. pGameModuleInsert = CreateModuleInfo();
  77. //结果判断
  78. if (pGameModuleInsert == NULL)
  79. {
  80. ASSERT(FALSE);
  81. return false;
  82. }
  83. }
  84. //设置数据
  85. m_GameModuleInfoMap[wGameID] = pGameModuleInsert;
  86. CopyMemory(pGameModuleInsert, pGameModuleInfo, sizeof(tagGameModuleInfo));
  87. return true;
  88. }
  89. //获取数目
  90. DWORD CModuleInfoBuffer::GetModuleInfoCount()
  91. {
  92. return (DWORD)(m_GameModuleInfoMap.GetCount());
  93. }
  94. //查找数据
  95. tagGameModuleInfo * CModuleInfoBuffer::SearchModuleInfo(WORD wModuleID)
  96. {
  97. tagGameModuleInfo * pGameModuleInfo = NULL;
  98. m_GameModuleInfoMap.Lookup(wModuleID, pGameModuleInfo);
  99. return pGameModuleInfo;
  100. }
  101. //创建对象
  102. tagGameModuleInfo * CModuleInfoBuffer::CreateModuleInfo()
  103. {
  104. //变量定义
  105. tagGameModuleInfo * pGameModuleInfo = NULL;
  106. //创建对象
  107. try
  108. {
  109. INT_PTR nArrayCount = m_GameModuleInfoArray.GetCount();
  110. if (nArrayCount > 0)
  111. {
  112. pGameModuleInfo = m_GameModuleInfoArray[nArrayCount - 1];
  113. m_GameModuleInfoArray.RemoveAt(nArrayCount - 1);
  114. }
  115. else
  116. {
  117. pGameModuleInfo = new tagGameModuleInfo;
  118. if (pGameModuleInfo == NULL) return NULL;
  119. }
  120. }
  121. catch (...) { return false; }
  122. //设置变量
  123. ZeroMemory(pGameModuleInfo, sizeof(tagGameModuleInfo));
  124. return pGameModuleInfo;
  125. }
  126. //////////////////////////////////////////////////////////////////////////////////
  127. //构造函数
  128. CModuleInfoManager::CModuleInfoManager()
  129. {
  130. }
  131. //析构函数
  132. CModuleInfoManager::~CModuleInfoManager()
  133. {
  134. }
  135. //注册模块
  136. bool CModuleInfoManager::RegisterGameModule(LPCTSTR pszModuleName)
  137. {
  138. return true;
  139. }
  140. //注销模块
  141. bool CModuleInfoManager::UnRegisterGameModule(LPCTSTR pszModuleName)
  142. {
  143. return true;
  144. }
  145. //加载模块 SELECT * FROM GameGameItem(NOLOCK) ORDER BY GameName
  146. bool CModuleInfoManager::LoadGameModuleInfo(CModuleInfoBuffer & ModuleInfoBuffer)
  147. {
  148. //变量定义
  149. CDataBaseAide PlatformDBAide;
  150. CDataBaseHelper PlatformDBModule;
  151. //创建对象
  152. if ((PlatformDBModule.GetInterface() == NULL) && (PlatformDBModule.CreateInstance() == false))
  153. {
  154. AfxMessageBox(TEXT("LoadGameModuleInfo 创建 PlatformDBModule 对象失败"), MB_ICONERROR);
  155. return false;
  156. }
  157. //连接数据库
  158. try
  159. {
  160. //变量定义
  161. CModuleDBParameter * pModuleDBParameter = CModuleDBParameter::GetModuleDBParameter();
  162. tagDataBaseParameter * pDataBaseParameter = pModuleDBParameter->GetPlatformDBParameter();
  163. //设置连接
  164. PlatformDBModule->SetConnectionInfo(pDataBaseParameter->szDataBaseAddr, pDataBaseParameter->wDataBasePort,
  165. pDataBaseParameter->szDataBaseName, pDataBaseParameter->szDataBaseUser, pDataBaseParameter->szDataBasePass);
  166. //发起连接
  167. PlatformDBModule->OpenConnection();
  168. PlatformDBAide.SetDataBase(PlatformDBModule.GetInterface());
  169. //读取列表
  170. PlatformDBAide.ResetParameter();
  171. if (PlatformDBAide.ExecuteProcess(TEXT("GSP_GS_LoadGameGameItem"), true) == DB_SUCCESS)
  172. {
  173. //清空列表
  174. ModuleInfoBuffer.ResetModuleInfo();
  175. //读取列表
  176. while (PlatformDBModule->IsRecordsetEnd() == false)
  177. {
  178. //变量定义
  179. tagGameModuleInfo GameModuleInfo;
  180. ZeroMemory(&GameModuleInfo, sizeof(GameModuleInfo));
  181. //模块属性
  182. GameModuleInfo.wGameID = PlatformDBAide.GetValue_WORD(TEXT("GameID"));
  183. GameModuleInfo.dwClientVersion = PlatformDBAide.GetValue_DWORD(TEXT("ClientVersion"));
  184. GameModuleInfo.dwServerVersion = PlatformDBAide.GetValue_DWORD(TEXT("ServerVersion"));
  185. //数据属性
  186. PlatformDBAide.GetValue_String(TEXT("GameName"), GameModuleInfo.szGameName, CountArray(GameModuleInfo.szGameName));
  187. PlatformDBAide.GetValue_String(TEXT("DataBaseAddr"), GameModuleInfo.szDataBaseAddr, CountArray(GameModuleInfo.szDataBaseAddr));
  188. PlatformDBAide.GetValue_String(TEXT("DataBaseName"), GameModuleInfo.szDataBaseName, CountArray(GameModuleInfo.szDataBaseName));
  189. //游戏属性
  190. PlatformDBAide.GetValue_String(TEXT("ServerDLLName"), GameModuleInfo.szServerDLLName, CountArray(GameModuleInfo.szServerDLLName));
  191. PlatformDBAide.GetValue_String(TEXT("ClientEXEName"), GameModuleInfo.szClientEXEName, CountArray(GameModuleInfo.szClientEXEName));
  192. //本地版本
  193. LPCTSTR pszServerDLLName = GameModuleInfo.szServerDLLName;
  194. CWHService::GetModuleVersion(pszServerDLLName, GameModuleInfo.dwNativeVersion);
  195. //列表处理
  196. ModuleInfoBuffer.InsertModuleInfo(&GameModuleInfo);
  197. //移动记录
  198. PlatformDBModule->MoveToNext();
  199. }
  200. }
  201. return true;
  202. }
  203. catch (IDataBaseException * pIException)
  204. {
  205. //错误信息
  206. LPCTSTR pszDescribe = pIException->GetExceptionDescribe();
  207. CTraceService::TraceString(pszDescribe, TraceLevel_Exception);
  208. //错误提示
  209. AfxMessageBox(pszDescribe, MB_ICONERROR);
  210. }
  211. return false;
  212. }
  213. //模块属性
  214. bool CModuleInfoManager::GetGameServiceAttrib(LPCTSTR pszModuleName, tagGameServiceAttrib & GameServiceAttrib)
  215. {
  216. //设置变量
  217. ZeroMemory(&GameServiceAttrib, sizeof(GameServiceAttrib));
  218. //游戏模块
  219. CGameServiceManagerHelper GameServiceManager;
  220. GameServiceManager.SetModuleCreateInfo(pszModuleName, GAME_SERVICE_CREATE_NAME);
  221. //加载模块
  222. if (GameServiceManager.CreateInstance() == true)
  223. {
  224. GameServiceManager->GetServiceAttrib(GameServiceAttrib);
  225. return true;
  226. }
  227. return false;
  228. }
  229. //////////////////////////////////////////////////////////////////////////////////