230 lines
5.8 KiB
C++
230 lines
5.8 KiB
C++
|
|
|
|||
|
|
#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;
|
|||
|
|
}
|