Files
wnmj/Servers/服务器组件/模块管理/ModuleInfoManager.cpp

283 lines
6.8 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "ModuleDBParameter.h"
#include "ModuleInfoManager.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CModuleInfoBuffer::CModuleInfoBuffer()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CModuleInfoBuffer::~CModuleInfoBuffer()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wModuleID=0;
tagGameModuleInfo * pGameModuleInfo=NULL;
POSITION Position=m_GameModuleInfoMap.GetStartPosition();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (Position!=NULL)
{
m_GameModuleInfoMap.GetNextAssoc(Position,wModuleID,pGameModuleInfo);
SafeDelete(pGameModuleInfo);
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (INT_PTR i=0;i<m_GameModuleInfoArray.GetCount();i++)
{
pGameModuleInfo=m_GameModuleInfoArray[i];
SafeDelete(pGameModuleInfo);
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GameModuleInfoMap.RemoveAll();
m_GameModuleInfoArray.RemoveAll();
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CModuleInfoBuffer::ResetModuleInfo()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wModuleID=0;
tagGameModuleInfo * pGameModuleInfo=NULL;
POSITION Position=m_GameModuleInfoMap.GetStartPosition();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (Position!=NULL)
{
m_GameModuleInfoMap.GetNextAssoc(Position,wModuleID,pGameModuleInfo);
m_GameModuleInfoArray.Add(pGameModuleInfo);
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GameModuleInfoMap.RemoveAll();
return true;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CModuleInfoBuffer::DeleteModuleInfo(WORD wModuleID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo * pGameModuleInfo=NULL;
if (m_GameModuleInfoMap.Lookup(wModuleID,pGameModuleInfo)==FALSE) return false;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GameModuleInfoMap.RemoveKey(wModuleID);
m_GameModuleInfoArray.Add(pGameModuleInfo);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameModuleInfo,sizeof(tagGameModuleInfo));
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CModuleInfoBuffer::InsertModuleInfo(tagGameModuleInfo * pGameModuleInfo)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameModuleInfo!=NULL);
if (pGameModuleInfo==NULL) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>
WORD wGameID=pGameModuleInfo->wGameID;
tagGameModuleInfo * pGameModuleInsert=SearchModuleInfo(wGameID);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (pGameModuleInsert==NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pGameModuleInsert=CreateModuleInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (pGameModuleInsert==NULL)
{
ASSERT(FALSE);
return false;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_GameModuleInfoMap[wGameID]=pGameModuleInsert;
CopyMemory(pGameModuleInsert,pGameModuleInfo,sizeof(tagGameModuleInfo));
return true;
}
//<2F><>ȡ<EFBFBD><C8A1>Ŀ
DWORD CModuleInfoBuffer::GetModuleInfoCount()
{
return (DWORD)(m_GameModuleInfoMap.GetCount());
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo * CModuleInfoBuffer::SearchModuleInfo(WORD wModuleID)
{
tagGameModuleInfo * pGameModuleInfo=NULL;
m_GameModuleInfoMap.Lookup(wModuleID,pGameModuleInfo);
return pGameModuleInfo;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo * CModuleInfoBuffer::CreateModuleInfo()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo * pGameModuleInfo=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; }
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(pGameModuleInfo,sizeof(tagGameModuleInfo));
return pGameModuleInfo;
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CModuleInfoManager::CModuleInfoManager()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CModuleInfoManager::~CModuleInfoManager()
{
}
//ע<><D7A2>ģ<EFBFBD><C4A3>
bool CModuleInfoManager::RegisterGameModule(LPCTSTR pszModuleName)
{
return true;
}
//ע<><D7A2>ģ<EFBFBD><C4A3>
bool CModuleInfoManager::UnRegisterGameModule(LPCTSTR pszModuleName)
{
return true;
}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
bool CModuleInfoManager::LoadGameModuleInfo(CModuleInfoBuffer & ModuleInfoBuffer)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDataBaseAide PlatformDBAide;
CDataBaseHelper PlatformDBModule;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((PlatformDBModule.GetInterface()==NULL)&&(PlatformDBModule.CreateInstance()==false))
{
AfxMessageBox(TEXT("LoadGameModuleInfo <20><><EFBFBD><EFBFBD> PlatformDBModule <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>"),MB_ICONERROR);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
try
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CModuleDBParameter * pModuleDBParameter=CModuleDBParameter::GetModuleDBParameter();
tagDataBaseParameter * pDataBaseParameter=pModuleDBParameter->GetPlatformDBParameter();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PlatformDBModule->SetConnectionInfo(pDataBaseParameter->szDataBaseAddr,pDataBaseParameter->wDataBasePort,
pDataBaseParameter->szDataBaseName,pDataBaseParameter->szDataBaseUser,pDataBaseParameter->szDataBasePass);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PlatformDBModule->OpenConnection();
PlatformDBAide.SetDataBase(PlatformDBModule.GetInterface());
//<2F><>ȡ<EFBFBD>б<EFBFBD>
PlatformDBAide.ResetParameter();
if (PlatformDBAide.ExecuteProcess(TEXT("GSP_GS_LoadGameGameItem"),true)==DB_SUCCESS)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
ModuleInfoBuffer.ResetModuleInfo();
//<2F><>ȡ<EFBFBD>б<EFBFBD>
while (PlatformDBModule->IsRecordsetEnd()==false)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameModuleInfo GameModuleInfo;
ZeroMemory(&GameModuleInfo,sizeof(GameModuleInfo));
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameModuleInfo.wGameID=PlatformDBAide.GetValue_WORD(TEXT("GameID"));
GameModuleInfo.dwClientVersion=PlatformDBAide.GetValue_DWORD(TEXT("ClientVersion"));
GameModuleInfo.dwServerVersion=PlatformDBAide.GetValue_DWORD(TEXT("ServerVersion"));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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));
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
PlatformDBAide.GetValue_String(TEXT("ServerDLLName"),GameModuleInfo.szServerDLLName,CountArray(GameModuleInfo.szServerDLLName));
PlatformDBAide.GetValue_String(TEXT("ClientEXEName"),GameModuleInfo.szClientEXEName,CountArray(GameModuleInfo.szClientEXEName));
//<2F><><EFBFBD>ذ汾
LPCTSTR pszServerDLLName=GameModuleInfo.szServerDLLName;
CWHService::GetModuleVersion(pszServerDLLName,GameModuleInfo.dwNativeVersion);
//<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
ModuleInfoBuffer.InsertModuleInfo(&GameModuleInfo);
//<2F>ƶ<EFBFBD><C6B6><EFBFBD>¼
PlatformDBModule->MoveToNext();
}
}
return true;
}
catch (IDataBaseException * pIException)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
LPCTSTR pszDescribe=pIException->GetExceptionDescribe();
CTraceService::TraceString(pszDescribe,TraceLevel_Exception);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
AfxMessageBox(pszDescribe,MB_ICONERROR);
}
return false;
}
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CModuleInfoManager::GetGameServiceAttrib(LPCTSTR pszModuleName, tagGameServiceAttrib & GameServiceAttrib)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
ZeroMemory(&GameServiceAttrib,sizeof(GameServiceAttrib));
//<2F><>Ϸģ<CFB7><C4A3>
CGameServiceManagerHelper GameServiceManager;
GameServiceManager.SetModuleCreateInfo(pszModuleName,GAME_SERVICE_CREATE_NAME);
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
if (GameServiceManager.CreateInstance()==true)
{
GameServiceManager->GetServiceAttrib(GameServiceAttrib);
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////////////