283 lines
6.8 KiB
C++
283 lines
6.8 KiB
C++
#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;
|
|
}
|
|
|
|
//加载模块
|
|
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;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|