Files
mir_server/server/DBServer/DBConfig.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

230 lines
5.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
CDBConfig::CDBConfig(void)
{
}
CDBConfig::~CDBConfig(void)
{
}
//读取跨服配置表
bool CDBConfig::LoadCrossServerConfig()
{
/*
bool result = false;
CMemoryStream ms;
try
{
if ( ms.loadFromFile("crossserver.txt") <= 0 )
{
showError(_T("unable to load config from file crossserver.txt"));
return result;
}
if ( !setScript((LPCSTR)ms.getMemory()) )
{
showError(_T("parse config script failed"));
return false;
}
if ( openGlobalTable("crossserver"))
{
int nCenterServerIndex = 0;
if ( openFieldTable("map"))
{
size_t nCount = lua_objlen(m_pLua,-1);
if ( enumTableFirst() )
{
do
{
int nStart = getFieldInt("start");
int nEnd = getFieldInt("idend");
int nCenterid = getFieldInt("centerid");
if(ServerIndex >= nStart && ServerIndex <= nEnd && ServerIndex != nCenterid)
{
nCenterServerIndex = nCenterid;
//break;
}
}while (enumTableNext());
}
closeTable();
}
if(nCenterServerIndex > 0)
{
if ( openFieldTable("center"))
{
size_t nCount = lua_objlen(m_pLua,-1);
if ( enumTableFirst() )
{
ZeroMemory(&DBCenterAddr, sizeof(DBCenterAddr));
INT_PTR nIdx = 0;
do
{
// 读取DBCenter服务器配置
int nServerId = getFieldInt("id");
if(nServerId == nCenterServerIndex)
{
getFieldStringBuffer("commondbsrv", DBCenterAddr.szAddr, sizeof(DBCenterAddr.szAddr));
DBCenterAddr.nPort = getFieldInt("dbport");
// break;
}
nIdx++;
}while (enumTableNext());
}
closeTable();//GateService
}
}
closeTable();//关闭DBServer
}
}
catch(RefString &s)
{
OutputMsg( rmNormal, s.rawStr() );
}
catch(...)
{
OutputMsg( rmNormal, _T("unexpected error on load config") );
}
*/
//数据服不再读取配置了
return true;
}
bool CDBConfig::ReadConfig(const char *pszConfigFileName)
{
if (!pszConfigFileName)
pszConfigFileName = "DBServerLinux.txt";
bool result = false;
CMemoryStream ms;
try
{
if ( ms.loadFromFile(pszConfigFileName) <= 0 )
// if ( ms.loadFromFile("E:/WorkSpace/WorkSVN/tcgp/trunk/Phoenix/server/build/DBServer/DBServer.txt") <= 0 )
{
showError(_T("unable to load config from file DBServerLinux.txt"));
return result;
}
if ( !setScript((LPCSTR)ms.getMemory()) )
{
showError(_T("parse config script failed"));
return false;
}
if ( openGlobalTable("DBServer"))
{
getFieldStringBuffer(("ServerName"), ServerName,sizeof(ServerName));
ServerIndex = getFieldInt("ServerIndex");
getFieldStringBuffer("BoyNameFile", m_sPrefixList, sizeof(m_sPrefixList));
//getFieldStringBuffer("NameConnectList", m_sConnectList, sizeof(m_sConnectList));
getFieldStringBuffer("GirlNameFile", m_sStuffixList, sizeof(m_sStuffixList));
LPCTSTR stemp = getFieldString("EsqlToolPath","D:\\cqAdmin\\ESQL\\ESQLTool.exe");
_asncpytA(m_EsqlToolPath,stemp);
m_EsqlToolPath[sizeof(m_EsqlToolPath)-1] = 0;
int nDef =0;
DbConf.boUtf8= getFieldInt("utf8", &nDef ) ?true:false; //数据库的编码是不是utf8
if ( openFieldTable("GateService"))
{
getFieldStringBuffer(("Address"), GateAddr.szAddr,sizeof(GateAddr.szAddr));
GateAddr.nPort = getFieldInt("Port");
closeTable();//GateService
}
if ( openFieldTable("DBService"))
{
getFieldStringBuffer(("Address"), DataAddr.szAddr,sizeof(DataAddr.szAddr));
DataAddr.nPort = getFieldInt("Port");
closeTable();//DBService
}
if ( openFieldTable("LogServer"))
{
getFieldStringBuffer(("Address"), LogAddr.szAddr,sizeof(LogAddr.szAddr));
LogAddr.nPort = getFieldInt("Port");
closeTable();//LogServer
}
/*
if ( openFieldTable("SessionServer"))
{
getFieldStringBuffer(("Address"), SessionAddr.szAddr,sizeof(SessionAddr.szAddr));
SessionAddr.nPort = getFieldInt("Port");
closeTable();//SessionServer
}
*/
if ( openFieldTable("NameServer"))
{
getFieldStringBuffer(("Address"), NameAddr.szAddr,sizeof(NameAddr.szAddr));
NameAddr.nPort = getFieldInt("Port");
closeTable();//NameServer
}
// 读取DBCenter服务器配置
/*
去掉了dbsencter的读取
ZeroMemory(&DBCenterAddr, sizeof(DBCenterAddr));
if (feildTableExists("DBCenter") && openFieldTable("DBCenter"))
{
getFieldStringBuffer("Address", DBCenterAddr.szAddr, sizeof(DBCenterAddr.szAddr));
DBCenterAddr.nPort = getFieldInt("Port");
closeTable();
}
*/
if ( openFieldTable("SQL"))
{
getFieldStringBuffer(("Host"), DbConf.szHost,sizeof(DbConf.szHost));
DbConf.nPort = getFieldInt("Port");
getFieldStringBuffer(("DBName"), DbConf.szDbName,sizeof(DbConf.szDbName));
getFieldStringBuffer(("DBUser"), DbConf.szUser,sizeof(DbConf.szUser));
char szTemp[100];
//getFieldStringBuffer(("DBPass"), szTemp,sizeof(szTemp));
// getFieldStringBuffer(("Key"), DbConf.szKey,sizeof(DbConf.szKey));
//密码要解密
//DecryptPassword(DbConf.szPassWord,sizeof(DbConf.szPassWord),szTemp,"123456abc123456a");
getFieldStringBuffer(("DBPass"), DbConf.szPassWord,sizeof(DbConf.szPassWord));
closeTable();//DB
result = true;
}
closeTable();//关闭DBServer
}
}
catch(RefString &s)
{
OutputMsg( rmNormal, s.rawStr() );
}
catch(...)
{
OutputMsg( rmNormal, _T("unexpected error on load config") );
}
if(result)
{
result = LoadCrossServerConfig();
}
return result;
}
void CDBConfig::ShowError(const LPCTSTR sError)
{
m_sLastErrDesc = sError;
RefString sErr;
sErr = _T("[Configuration Error]");
sErr += sError;
//集中处理错误为了简单起见此处直接抛出异常。异常会在readConfig中被捕获从而立刻跳出对配置的循环读取。
throw sErr;
}