Files
mir_server/server/AmServer/SrvConfig.cpp

263 lines
7.9 KiB
C++
Raw Normal View History

2025-01-09 17:45:40 +08:00
#include "stdafx.h"
#include "SrvConfig.h"
using namespace wylib::stream;
CSrvConfig::~CSrvConfig(void)
{
m_platforms.empty();
}
bool CSrvConfig::ReadConfig(const char *pszFileName)
{
//try
//{
// CMemoryStream ms;
// ms.loadFromFile("AMServer.txt");
// setScript((LPCSTR)ms.getMemory());
// if ( openGlobalTable("AMServer"))
// {
// getFieldStringBuffer(("ServiceName"), m_ServiceName,sizeof(m_ServiceName));
// if ( openFieldTable("Products"))
// {
// if (enumTableFirst())
// {
// do
// {
// PRODUCTCONF Product;
// getFieldStringBuffer(("Name"), Product.sName,sizeof(Product.sName));
// getFieldStringBuffer(("Spid"), Product.sSpid,sizeof(Product.sSpid));
// getFieldStringBuffer(("Host"), Product.sHost,sizeof(Product.sHost));
// Product.nPort = getFieldInt("Port");
// getFieldStringBuffer(("DBName"), Product.sDBName,sizeof(Product.sDBName));
// getFieldStringBuffer(("DBUser"), Product.sDBUser,sizeof(Product.sDBUser));
// char szTemp[100];
// getFieldStringBuffer(("DBPass"), szTemp,sizeof(szTemp));
// DecryptPassword(Product.sDBPass,sizeof(Product.sDBPass),szTemp,"123456abc123456a");
// memset(szTemp,0,sizeof(szTemp));
// getFieldStringBuffer(("PayKey"), szTemp,sizeof(szTemp));
// DecryptPassword(Product.sPayKey,sizeof(Product.sPayKey),szTemp,"123456abc123456a");
// Product.sAuthorizationIP = getFieldString("AuthorizationIP");
// m_ProductList.add(Product);
//
// } while (enumTableNext());
// }
// closeTable();//DB
// }
// if ( openFieldTable(("Server")))
// {
// if ( openFieldTable(("HttpServer")))
// {
// getFieldStringBuffer(("BindAddress"), m_HttpServerConf.sAddr,sizeof(m_HttpServerConf.sAddr));
// m_HttpServerConf.nPort = getFieldInt("Port");
// closeTable();
// }
// if ( openFieldTable(("AmountServer")))
// {
// getFieldStringBuffer(("BindAddress"), m_AmountServerConf.sAddr,sizeof(m_AmountServerConf.sAddr));
// m_AmountServerConf.nPort = getFieldInt("Port");
// closeTable();
// }
// closeTable();//DB
// }
// closeTable();//关闭Config
// }
//}
//catch(RefString &s)
//{
// OutputMsg( rmNormal, s.rawStr() );
//}
//catch(...)
//{
// OutputMsg( rmNormal, _T("unexpected error on load config") );
//}
OutputMsg(rmTip,"load file from %s",pszFileName);
bool result = false;
wylib::stream::CMemoryStream ms;
try
{
//加载配置文件
if ( ms.loadFromFile(pszFileName) <= 0 )
{
showErrorFormat(_T("unabled to load config from %s"), pszFileName);
bAMEngineStartSucceed = false;
return false;
}
setScript((LPCSTR)ms.getMemory());
//读取配置文件
if ( !openGlobalTable("amconfig") )
{
OutputMsg(rmWaning,"No table amconfig found in config");
bAMEngineStartSucceed = false;
throw ;
}
int nValue = getFieldInt("httpport");
m_nHttpport = nValue; //设置http端口
nValue = getFieldInt("amport");
m_nAmport = nValue ; //设置am端口
strncpy(m_sServerName,getFieldString("servername",""),sizeof(m_sServerName));
if (!openFieldTable("platform"))
{
OutputMsg(rmWaning,"No table platform found in config");
bAMEngineStartSucceed = false;
throw ;
}
m_platforms.clear();
size_t nCount = lua_objlen(m_pLua,-1);
m_platforms.reserve(nCount); //保留这么多个数
if (enumTableFirst())
{
int i=0;
do
{
PlatForm config;
strncpy(config.spid,getFieldString("spid",""),sizeof(config.spid));
strncpy(config.code,getFieldString("code",""),sizeof(config.code));
strncpy(config.db,getFieldString("db",""),sizeof(config.db));
strncpy(config.bianma,getFieldString("bianma","latin1"),sizeof(config.bianma));
strncpy(config.host,getFieldString("host",""),sizeof(config.host));
char szTemp[128] ;
char keykey[17] ;
char passkey[17] ;
keykey[0]='z',keykey[1]='*',keykey[6]='@',keykey[2]='i',keykey[7]='c',keykey[12]='%',keykey[3]='v',keykey[14]='1',
keykey[11]='5',keykey[13]='9',keykey[8]='c',keykey[9]='3',keykey[15]='3',keykey[4]='l',keykey[5]='@',keykey[10]='6',keykey[16]=0 ;
passkey[0]='u',passkey[1]='a',passkey[6]='z',passkey[2]='9',passkey[7]='3',passkey[12]='%',passkey[3]='k',passkey[14]='@',
passkey[11]='&',passkey[13]='4',passkey[8]='g',passkey[9]='v',passkey[15]='8',passkey[4]='2',passkey[5]='@',passkey[10]='!',passkey[16]=0;
getFieldStringBuffer(("user"), config.user,sizeof(config.user));
//DecryptPassword(config.user,sizeof(config.user),szTemp,passkey);
//memset(szTemp,0,sizeof(szTemp));
//EncryptPassword(szTemp, sizeof(szTemp), "cqmaster", passkey);
//DecryptPassword(szTemp,sizeof(szTemp),tmp,passkey);
memset(szTemp,0,sizeof(szTemp));
getFieldStringBuffer(("pass"), config.pass,sizeof(szTemp));
//DecryptPassword(config.pass,sizeof(config.pass),szTemp,passkey);
memset(szTemp,0,sizeof(szTemp));
getFieldStringBuffer(("paykey"), szTemp,sizeof(szTemp));
DecryptPassword(config.paykey,sizeof(config.paykey),szTemp,keykey);
memset(szTemp,0,sizeof(szTemp));
getFieldStringBuffer(("awdkey"), szTemp,sizeof(szTemp));
DecryptPassword(config.awdkey,sizeof(config.awdkey),szTemp,keykey);
memset(szTemp,0,sizeof(szTemp));
getFieldStringBuffer(("awdkey"), szTemp,sizeof(szTemp));
DecryptPassword(config.awdkey,sizeof(config.awdkey),szTemp,keykey);
//memset(szTemp,0,sizeof(szTemp));
//char tmp[128];
//memset(tmp,0,sizeof(tmp));
//EncryptPassword(tmp, sizeof(tmp), "1101994183T320140912113752", keykey);
//DecryptPassword(szTemp,sizeof(szTemp),tmp,keykey);
//memset(tmp,0,sizeof(tmp));
//EncryptPassword(tmp, sizeof(tmp), "1101994183T320140912193716", keykey);
//DecryptPassword(szTemp,sizeof(szTemp),tmp,keykey);
//strncpy(config.pass,getFieldString("pass",""),sizeof(config.pass));
//strncpy(config.paykey,getFieldString("paykey",""),sizeof(config.paykey));
//strncpy(config.awdkey,getFieldString("awdkey",""),sizeof(config.awdkey));
config.codeid = getFieldInt("codeid");
config.port = getFieldInt("port");
if (openFieldTable("hosts"))
{
int j=0;
if (enumTableFirst())
{
do
{
long long nHost = inet_addr (getFieldString(NULL) );
bool flag = true ;
for( int k=0; k<j; ++k )
{
if( nHost == config.hosts[k] )
{
flag = false ;
break ;
}
}
if(j < MAX_HOST_COUNT && flag )
{
config.hosts[j]= nHost;
j++;
}
if( j >= MAX_HOST_COUNT )
break ;
} while (enumTableNext());
}
config.hostcount = j;
closeTable();
}
if (feildTableExists("contractid") && openFieldTable("contractid"))
{
int j=0;
if (enumTableFirst())
{
do
{
memset(szTemp,0,sizeof(szTemp));
strcpy(szTemp, getFieldString(NULL));
DecryptPassword(config.constractid[j],sizeof(config.constractid[j]),szTemp,keykey);
j++;
if( j >= MAX_TAST_COUNT )
break ;
} while (enumTableNext());
}
config.taskcount = j;
closeTable();
}
else
{
for(int j=0; j<MAX_TAST_COUNT; ++j)
{
config.constractid[j][0] = 0;
}
config.taskcount = 0;
}
m_platforms.add(config);
i++;
} while (enumTableNext());
}
closeTable();
closeTable();
}
catch (RefString& s)
{
OutputMsg( rmError, (LPCTSTR)s );
}
catch (...)
{
OutputMsg( rmError, _T("unexpected error on load config") );
}
return result;
}
void CSrvConfig::ShowError(const LPCTSTR sError)
{
m_sLastErrDesc = sError;
RefString sErr;
sErr = _T("[Configuration Error]");
sErr += sError;
//集中处理错误为了简单起见此处直接抛出异常。异常会在readConfig中被捕获从而立刻跳出对配置的循环读取。
throw sErr;
}
PlatForm * CSrvConfig::GetPlatForm(int nIndex)
{
if (nIndex >= 0 && nIndex < m_platforms.count())
{
return &m_platforms[nIndex];
}
return NULL;
}