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

263 lines
7.9 KiB
C++
Raw 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"
#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;
}