#include "StdAfx.h" #include "ModuleDBParameter.h" #include "ModuleInfoManager.h" ////////////////////////////////////////////////////////////////////////////////// //构造函数 CModuleInfoBuffer::CModuleInfoBuffer() { } //析构函数 CModuleInfoBuffer::~CModuleInfoBuffer() { //变量定义 WORD wModuleID = 0; tagGameModuleInfo * pGameModuleInfo = NULL; POSITION Position = m_GameModuleInfoMap.GetStartPosition(); //删除索引 while (Position != NULL) { m_GameModuleInfoMap.GetNextAssoc(Position, wModuleID, pGameModuleInfo); SafeDelete(pGameModuleInfo); } //删除数组 for (INT_PTR i = 0; i < m_GameModuleInfoArray.GetCount(); i++) { pGameModuleInfo = m_GameModuleInfoArray[i]; SafeDelete(pGameModuleInfo); } //删除引用 m_GameModuleInfoMap.RemoveAll(); m_GameModuleInfoArray.RemoveAll(); return; } //重置数据 bool CModuleInfoBuffer::ResetModuleInfo() { //变量定义 WORD wModuleID = 0; tagGameModuleInfo * pGameModuleInfo = NULL; POSITION Position = m_GameModuleInfoMap.GetStartPosition(); //删除对象 while (Position != NULL) { m_GameModuleInfoMap.GetNextAssoc(Position, wModuleID, pGameModuleInfo); m_GameModuleInfoArray.Add(pGameModuleInfo); } //删除索引 m_GameModuleInfoMap.RemoveAll(); return true; } //删除数据 bool CModuleInfoBuffer::DeleteModuleInfo(WORD wModuleID) { //查找类型 tagGameModuleInfo * pGameModuleInfo = NULL; if (m_GameModuleInfoMap.Lookup(wModuleID, pGameModuleInfo) == FALSE) return false; //删除数据 m_GameModuleInfoMap.RemoveKey(wModuleID); m_GameModuleInfoArray.Add(pGameModuleInfo); //设置变量 ZeroMemory(pGameModuleInfo, sizeof(tagGameModuleInfo)); return true; } //插入数据 bool CModuleInfoBuffer::InsertModuleInfo(tagGameModuleInfo * pGameModuleInfo) { //效验参数 ASSERT(pGameModuleInfo != NULL); if (pGameModuleInfo == NULL) return false; //查找现存 WORD wGameID = pGameModuleInfo->wGameID; tagGameModuleInfo * pGameModuleInsert = SearchModuleInfo(wGameID); //创建判断 if (pGameModuleInsert == NULL) { //创建对象 pGameModuleInsert = CreateModuleInfo(); //结果判断 if (pGameModuleInsert == NULL) { ASSERT(FALSE); return false; } } //设置数据 m_GameModuleInfoMap[wGameID] = pGameModuleInsert; CopyMemory(pGameModuleInsert, pGameModuleInfo, sizeof(tagGameModuleInfo)); return true; } //获取数目 DWORD CModuleInfoBuffer::GetModuleInfoCount() { return (DWORD)(m_GameModuleInfoMap.GetCount()); } //查找数据 tagGameModuleInfo * CModuleInfoBuffer::SearchModuleInfo(WORD wModuleID) { tagGameModuleInfo * pGameModuleInfo = NULL; m_GameModuleInfoMap.Lookup(wModuleID, pGameModuleInfo); return pGameModuleInfo; } //创建对象 tagGameModuleInfo * CModuleInfoBuffer::CreateModuleInfo() { //变量定义 tagGameModuleInfo * pGameModuleInfo = NULL; //创建对象 try { INT_PTR nArrayCount = m_GameModuleInfoArray.GetCount(); if (nArrayCount > 0) { pGameModuleInfo = m_GameModuleInfoArray[nArrayCount - 1]; m_GameModuleInfoArray.RemoveAt(nArrayCount - 1); } else { pGameModuleInfo = new tagGameModuleInfo; if (pGameModuleInfo == NULL) return NULL; } } catch (...) { return false; } //设置变量 ZeroMemory(pGameModuleInfo, sizeof(tagGameModuleInfo)); return pGameModuleInfo; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CModuleInfoManager::CModuleInfoManager() { } //析构函数 CModuleInfoManager::~CModuleInfoManager() { } //注册模块 bool CModuleInfoManager::RegisterGameModule(LPCTSTR pszModuleName) { return true; } //注销模块 bool CModuleInfoManager::UnRegisterGameModule(LPCTSTR pszModuleName) { return true; } //加载模块 SELECT * FROM GameGameItem(NOLOCK) ORDER BY GameName bool CModuleInfoManager::LoadGameModuleInfo(CModuleInfoBuffer & ModuleInfoBuffer) { //变量定义 CDataBaseAide PlatformDBAide; CDataBaseHelper PlatformDBModule; //创建对象 if ((PlatformDBModule.GetInterface() == NULL) && (PlatformDBModule.CreateInstance() == false)) { AfxMessageBox(TEXT("LoadGameModuleInfo 创建 PlatformDBModule 对象失败"), MB_ICONERROR); return false; } //连接数据库 try { //变量定义 CModuleDBParameter * pModuleDBParameter = CModuleDBParameter::GetModuleDBParameter(); tagDataBaseParameter * pDataBaseParameter = pModuleDBParameter->GetPlatformDBParameter(); //设置连接 PlatformDBModule->SetConnectionInfo(pDataBaseParameter->szDataBaseAddr, pDataBaseParameter->wDataBasePort, pDataBaseParameter->szDataBaseName, pDataBaseParameter->szDataBaseUser, pDataBaseParameter->szDataBasePass); //发起连接 PlatformDBModule->OpenConnection(); PlatformDBAide.SetDataBase(PlatformDBModule.GetInterface()); //读取列表 PlatformDBAide.ResetParameter(); if (PlatformDBAide.ExecuteProcess(TEXT("GSP_GS_LoadGameGameItem"), true) == DB_SUCCESS) { //清空列表 ModuleInfoBuffer.ResetModuleInfo(); //读取列表 while (PlatformDBModule->IsRecordsetEnd() == false) { //变量定义 tagGameModuleInfo GameModuleInfo; ZeroMemory(&GameModuleInfo, sizeof(GameModuleInfo)); //模块属性 GameModuleInfo.wGameID = PlatformDBAide.GetValue_WORD(TEXT("GameID")); GameModuleInfo.dwClientVersion = PlatformDBAide.GetValue_DWORD(TEXT("ClientVersion")); GameModuleInfo.dwServerVersion = PlatformDBAide.GetValue_DWORD(TEXT("ServerVersion")); //数据属性 PlatformDBAide.GetValue_String(TEXT("GameName"), GameModuleInfo.szGameName, CountArray(GameModuleInfo.szGameName)); PlatformDBAide.GetValue_String(TEXT("DataBaseAddr"), GameModuleInfo.szDataBaseAddr, CountArray(GameModuleInfo.szDataBaseAddr)); PlatformDBAide.GetValue_String(TEXT("DataBaseName"), GameModuleInfo.szDataBaseName, CountArray(GameModuleInfo.szDataBaseName)); //游戏属性 PlatformDBAide.GetValue_String(TEXT("ServerDLLName"), GameModuleInfo.szServerDLLName, CountArray(GameModuleInfo.szServerDLLName)); PlatformDBAide.GetValue_String(TEXT("ClientEXEName"), GameModuleInfo.szClientEXEName, CountArray(GameModuleInfo.szClientEXEName)); //本地版本 LPCTSTR pszServerDLLName = GameModuleInfo.szServerDLLName; CWHService::GetModuleVersion(pszServerDLLName, GameModuleInfo.dwNativeVersion); //列表处理 ModuleInfoBuffer.InsertModuleInfo(&GameModuleInfo); //移动记录 PlatformDBModule->MoveToNext(); } } return true; } catch (IDataBaseException * pIException) { //错误信息 LPCTSTR pszDescribe = pIException->GetExceptionDescribe(); CTraceService::TraceString(pszDescribe, TraceLevel_Exception); //错误提示 AfxMessageBox(pszDescribe, MB_ICONERROR); } return false; } //模块属性 bool CModuleInfoManager::GetGameServiceAttrib(LPCTSTR pszModuleName, tagGameServiceAttrib & GameServiceAttrib) { //设置变量 ZeroMemory(&GameServiceAttrib, sizeof(GameServiceAttrib)); //游戏模块 CGameServiceManagerHelper GameServiceManager; GameServiceManager.SetModuleCreateInfo(pszModuleName, GAME_SERVICE_CREATE_NAME); //加载模块 if (GameServiceManager.CreateInstance() == true) { GameServiceManager->GetServiceAttrib(GameServiceAttrib); return true; } return false; } //////////////////////////////////////////////////////////////////////////////////