init
This commit is contained in:
893
server/LogicServer/config/LogicServerConfig.cpp
Normal file
893
server/LogicServer/config/LogicServerConfig.cpp
Normal file
@@ -0,0 +1,893 @@
|
||||
#include "StdAfx.h"
|
||||
#include "LogicServerConfig.h"
|
||||
#include "util_func_extend.h"
|
||||
|
||||
#define CROSSSERVER_CS_LOCAL_FILE "./data/crossserver.config"//跨服服务器配置 监听端口
|
||||
#define CROSSSERVER_SOURCE_CONNECT_FILE "./data/config/Cross/CrossSourceServer.config"//跨服服务器配置 原服
|
||||
#define CROSSSERVER_CROSSSE_CONNECT_FILE "./data/config/Cross/CrossServer.config"//跨服服务器配置 跨服
|
||||
|
||||
#define CROSSSERVER_SVR_ID_FILE "./data/config/Cross/LocalServer.config"//跨服标记服务器ID
|
||||
#define CROSSSERVER_CALCULATE_PARAM 100000 //跨服识别原服务器计算码
|
||||
|
||||
|
||||
const TCHAR CLogicServerConfig::ConfigFileName[] = _T("LogicServerLinux.txt");
|
||||
|
||||
CLogicServerConfig::CLogicServerConfig()
|
||||
:Inherited()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CLogicServerConfig::~CLogicServerConfig()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CLogicServerConfig::showError(LPCTSTR sError)
|
||||
{
|
||||
m_sLastErrDesc = sError;
|
||||
RefString s = _T("[Config Error]");
|
||||
s += sError;
|
||||
throw s;
|
||||
}
|
||||
|
||||
bool CLogicServerConfig::loadServerConfig(CLogicServer *lpLogicServer, const char *pszFileName)
|
||||
{
|
||||
bool boResult = false;
|
||||
if (!pszFileName)
|
||||
{
|
||||
pszFileName = ConfigFileName;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
boResult = throwLoadConfig(lpLogicServer, pszFileName);
|
||||
}
|
||||
catch (RefString &s)
|
||||
{
|
||||
OutputMsg(rmError, (LPCSTR)s);
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
OutputMsg(rmError, _T("unexpected error on load - read ServerConfig "));
|
||||
}
|
||||
OutputMsg(rmTip, _T("load server config complete"));
|
||||
return boResult;
|
||||
}
|
||||
|
||||
bool CLogicServerConfig::throwLoadConfig(CLogicServer *lpLogicServer, const char *pszFileName)
|
||||
{
|
||||
wylib::stream::CMemoryStream ms;
|
||||
if ( ms.loadFromFile(pszFileName) <= 0 )
|
||||
{
|
||||
showErrorFormat(_T("unable to load from %s"), pszFileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !setScript((LPSTR)ms.getMemory()) )
|
||||
return false;
|
||||
|
||||
return readServerConfig(lpLogicServer);
|
||||
}
|
||||
|
||||
bool CLogicServerConfig::readServerConfig(CLogicServer *lpLogicServer)
|
||||
{
|
||||
if ( !openGlobalTable("LogicServer") )
|
||||
return false;
|
||||
|
||||
LPCSTR sVal;
|
||||
INT nVal;
|
||||
char sServerName[128]; //
|
||||
|
||||
bool isCommonServer = false;
|
||||
isCommonServer = getFieldBoolean("IsCommonServer", &isCommonServer);
|
||||
GetLogicServer()->SetCommonServer(isCommonServer);
|
||||
|
||||
//服务器名字和index
|
||||
getFieldStringBuffer("ServerName", sServerName,ArrayCount(sServerName)); //name
|
||||
#ifdef WIN32
|
||||
CUtility::convertToACP(sServerName,strlen(sServerName), sServerName, ArrayCount(sServerName));
|
||||
#endif
|
||||
SYSTEMTIME startSysTime; //服务器的开启时间
|
||||
CMiniDateTime nStart;
|
||||
|
||||
BOOL IsValid =TRUE;
|
||||
LPCTSTR sName = getFieldString("ServerOpenTime", "",&IsValid);
|
||||
if( IsValid && sName != NULL && strlen(sName) >10) //是个基本合法的名字
|
||||
{
|
||||
sscanf(sName, "%d-%d-%d %d:%d:%d", &startSysTime.wYear, &startSysTime.wMonth, &startSysTime.wDay, &startSysTime.wHour, &startSysTime.wMinute, &startSysTime.wSecond);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetLocalTime(&startSysTime);
|
||||
}
|
||||
nStart.encode(startSysTime);
|
||||
|
||||
|
||||
SYSTEMTIME combineTime; //服务器的合服时间
|
||||
CMiniDateTime nCombine;
|
||||
|
||||
BOOL boValid =TRUE;
|
||||
LPCTSTR sTime = getFieldString("ServerCombineTime", "",&boValid);
|
||||
if( boValid && sTime != NULL && strlen(sTime) >10) //是个基本合法的名字
|
||||
{
|
||||
sscanf(sTime, "%d-%d-%d %d:%d:%d", &combineTime.wYear, &combineTime.wMonth, &combineTime.wDay, &combineTime.wHour, &combineTime.wMinute, &combineTime.wSecond);
|
||||
nCombine.encode(combineTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
nCombine = 0;
|
||||
}
|
||||
|
||||
nVal = getFieldInt("ServerIndex"); //serverindex
|
||||
|
||||
INT nServerIndex =nVal;
|
||||
|
||||
BOOL fiValid =TRUE;
|
||||
char strFilePath[64] = "./data/runtime";
|
||||
//sprintf_s(strFilePath,sizeof(strFilePath),"./data/runtime",nServerIndex);
|
||||
if (lpLogicServer)
|
||||
{
|
||||
lpLogicServer->SetServerIndex(nVal);
|
||||
lpLogicServer->SetServerName(sServerName);
|
||||
lpLogicServer->SetServerOpenTime(nStart); //设置开区时间
|
||||
lpLogicServer->SetServerCombineTime(nCombine); // 设置合区时间
|
||||
lpLogicServer->SetStrFilePath(strFilePath);
|
||||
}
|
||||
|
||||
nVal = 0;
|
||||
INT_PTR nSpid = getFieldInt("spguid",&nVal); //读取spid
|
||||
lpLogicServer->SetSpid(nSpid); //设置spid
|
||||
|
||||
/*
|
||||
bool bStartCommonServer = true;
|
||||
bStartCommonServer = getFieldBoolean("IsStartCommonServer", &bStartCommonServer);
|
||||
|
||||
nVal = 0;
|
||||
nVal = getFieldInt("CommonServerId", &nVal);
|
||||
if (lpLogicServer)
|
||||
lpLogicServer->SetCommonServerId(nVal);
|
||||
if ((!isCommonServer) && (nVal == 0 || bStartCommonServer == false))
|
||||
lpLogicServer->SetStartCommonServer(false);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
//网关服务配置
|
||||
if ( openFieldTable("GateService") )
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
if (NULL != sVal)
|
||||
{
|
||||
CLogicGateManager *pLogicManager = lpLogicServer->GetGateManager();
|
||||
if (pLogicManager)
|
||||
{
|
||||
pLogicManager->SetServiceHost(sVal);
|
||||
pLogicManager->SetServicePort(nVal);
|
||||
}
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
//会话服务配置
|
||||
if ( openFieldTable("SessionServer") )
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
|
||||
CLogicSSClient * pSessionClient = lpLogicServer->GetSessionClient();
|
||||
if (pSessionClient)
|
||||
{
|
||||
pSessionClient->SetServerHost(sVal);
|
||||
pSessionClient->SetServerPort(nVal);
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
//日志服务器地址配置
|
||||
if ( openFieldTable("LogServer") )
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
|
||||
LogSender * pLogClient =lpLogicServer->GetLogClient();
|
||||
if (pLogClient)
|
||||
{
|
||||
pLogClient->SetServerHost(sVal);
|
||||
pLogClient->SetServerPort(nVal);
|
||||
pLogClient->SetServerIndex(nServerIndex);
|
||||
pLogClient->SetServerName(sServerName);
|
||||
pLogClient->SetServerType(jxSrvDef::GameServer);
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
//公共日志服务器地址配置
|
||||
if ( openFieldTable("LocalLogServer") )
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
|
||||
CLocalSender * pLocalLogClient =lpLogicServer->GetLocalClient();
|
||||
if (pLocalLogClient)
|
||||
{
|
||||
pLocalLogClient->SetServerHost(sVal);
|
||||
pLocalLogClient->SetServerPort(nVal);
|
||||
pLocalLogClient->SetServerIndex(nServerIndex);
|
||||
pLocalLogClient->SetServerName(sServerName);
|
||||
pLocalLogClient->SetServerType(jxSrvDef::GameServer);
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
//数据client配置
|
||||
if (openFieldTable("DbServer"))
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
CDataClient * pDbClient =lpLogicServer->GetDbClient();
|
||||
if (pDbClient)
|
||||
{
|
||||
pDbClient->SetServerHost(sVal);
|
||||
pDbClient->SetServerPort(nVal);
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
//好友服务器配置
|
||||
//if (openFieldTable("FriendServer"))
|
||||
//{
|
||||
// CFriendClient *pClient = lpLogicServer->GetFriendClient();
|
||||
// //内部服务器地址配置
|
||||
// if (openFieldTable("Server"))
|
||||
// {
|
||||
// sVal = getFieldString("Host");
|
||||
// nVal = getFieldInt("Port");
|
||||
// pClient->SetServerHost(sVal);
|
||||
// pClient->SetServerPort(nVal);
|
||||
// closeTable();
|
||||
// }
|
||||
// //用户连接的好友服务器网关地址配置
|
||||
// if (openFieldTable("Gate"))
|
||||
// {
|
||||
// sVal = getFieldString("Host");
|
||||
// nVal = getFieldInt("Port");
|
||||
// pClient->SetFriendGateHost(sVal);
|
||||
// pClient->SetFriendGatePort(nVal);
|
||||
// closeTable();
|
||||
// }
|
||||
// closeTable();
|
||||
//}
|
||||
if (openFieldTable("MgrServer"))
|
||||
{
|
||||
sVal = getFieldString("Host");
|
||||
nVal = getFieldInt("Port");
|
||||
CBackStageSender * pClient = lpLogicServer->GetBackClient();
|
||||
if(pClient)
|
||||
{
|
||||
pClient->SetServerHost(sVal);
|
||||
pClient->SetServerPort(nVal);
|
||||
pClient->SetServerIndex(nServerIndex);
|
||||
pClient->SetServerName(sServerName);
|
||||
pClient->SetServerType(jxSrvDef::GameServer);
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
//if (feildTableExists("CommonServer") && openFieldTable("CommonServer"))
|
||||
//{
|
||||
// char szServerIP[32];
|
||||
// WORD wPort;
|
||||
// LPCSTR szField[2] = {"Server", "Client"};
|
||||
// int nIndex = isCommonServer ? 0 : 1;
|
||||
// if (feildTableExists(szField[nIndex]) && openFieldTable(szField[nIndex]))
|
||||
// {
|
||||
// getFieldStringBuffer("Address", szServerIP, ArrayCount(szServerIP));
|
||||
// wPort = (WORD)getFieldInt("Port");
|
||||
// GetLogicServer()->SetCommonServerAddr(szServerIP, wPort);
|
||||
// closeTable();
|
||||
// }
|
||||
// closeTable();
|
||||
//}
|
||||
|
||||
closeTable();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// //读取跨服配置表
|
||||
// bool CLogicServerConfig::LoadCrossServerConfig(CLogicServer *lpLogicServer,bool bReload)
|
||||
// {
|
||||
// if(!lpLogicServer) return false;
|
||||
|
||||
// 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 nServerIndex = GetLogicServer()->GetServerIndex();
|
||||
|
||||
// int nCenterServerIndex =0;
|
||||
// if(lpLogicServer->IsCommonServer())
|
||||
// {
|
||||
// nCenterServerIndex = nServerIndex;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// nCenterServerIndex= lpLogicServer->GetCommonServerId();
|
||||
// }
|
||||
|
||||
// //当前的公告服的ID
|
||||
// OutputMsg(rmTip,"LoadCrossServerConfig Common server index = %d",nCenterServerIndex); //当前
|
||||
|
||||
// LPCSTR sSPID = GetLogicServer()->GetVSPDefine().GetDefinition(CVSPDefinition::SPID);
|
||||
// if(nCenterServerIndex <= 0 && bReload)
|
||||
// {
|
||||
// if ( openFieldTable("map"))
|
||||
// {
|
||||
// size_t nCount = lua_objlen(m_pLua,-1);
|
||||
|
||||
// if ( enumTableFirst() )
|
||||
// {
|
||||
// do
|
||||
// {
|
||||
// int nId = getFieldInt("id");
|
||||
// LPCSTR tmpSpid = getFieldString("spid");
|
||||
// if ( openFieldTable("servers"))
|
||||
// {
|
||||
// INT_PTR j =0;
|
||||
// if (enumTableFirst())
|
||||
// {
|
||||
// do
|
||||
// {
|
||||
// int nServerid = (int)getFieldNumber(NULL);
|
||||
// if(nServerid == nServerIndex && strcmp(tmpSpid,sSPID) == 0)
|
||||
// {
|
||||
// lpLogicServer->SetCommonServer(false);
|
||||
// lpLogicServer->SetCommonServerId(nId);
|
||||
// lpLogicServer->SetStartCommonServer(true);
|
||||
// nCenterServerIndex = nId;
|
||||
// }
|
||||
// j++;
|
||||
// } while (enumTableNext());
|
||||
// }
|
||||
// closeTable();
|
||||
// }
|
||||
|
||||
// //if(nServerIndex == nCenterid)
|
||||
// //{
|
||||
// // lpLogicServer->SetCommonServer(true);
|
||||
// // nCenterServerIndex = nCenterid;
|
||||
// // //break;
|
||||
// //}
|
||||
|
||||
// //if(nServerIndex >= nStart && nServerIndex <= nEnd && nServerIndex != nCenterid)
|
||||
// //{
|
||||
// // lpLogicServer->SetCommonServer(false);
|
||||
// // lpLogicServer->SetCommonServerId(nCenterid);
|
||||
// // lpLogicServer->SetStartCommonServer(true);
|
||||
// // nCenterServerIndex = nCenterid;
|
||||
// // //break;
|
||||
// //}
|
||||
// }while (enumTableNext());
|
||||
// }
|
||||
|
||||
// closeTable();
|
||||
// }
|
||||
// }
|
||||
|
||||
// bool bHasServer =false;
|
||||
|
||||
// if ( openFieldTable("center"))
|
||||
// {
|
||||
// size_t nCount = lua_objlen(m_pLua,-1);
|
||||
|
||||
// if ( enumTableFirst() )
|
||||
// {
|
||||
|
||||
// INT_PTR nIdx = 0;
|
||||
// do
|
||||
// {
|
||||
// // 读取DBCenter服务器配置
|
||||
// int nServerId = getFieldInt("id");
|
||||
// char szClientServerIP[64]; //客户端连接的ip,给客户端用的
|
||||
// char szCommonServerIp[64]; //服务器连接的ip
|
||||
|
||||
// int nPort =0;
|
||||
// int nMinPort = 0;
|
||||
// int nMaxPort = 0;
|
||||
// if(nServerId == nCenterServerIndex)
|
||||
// {
|
||||
// getFieldStringBuffer("loginsrv", szClientServerIP, ArrayCount(szClientServerIP)); //连接的公共服的域名
|
||||
// getFieldStringBuffer("commondbsrv", szCommonServerIp, ArrayCount(szClientServerIP)); //连接公共数据服的域名
|
||||
|
||||
// nPort =getFieldInt("dbport");
|
||||
// nMinPort = getFieldInt("minport");
|
||||
// nMaxPort = getFieldInt("maxport");
|
||||
// GetLogicServer()->SetCommonServerAddr(szClientServerIP,szCommonServerIp, nPort,nMinPort,nMaxPort);
|
||||
|
||||
// bHasServer =true;
|
||||
|
||||
// }
|
||||
|
||||
// nIdx++;
|
||||
// }while (enumTableNext());
|
||||
// }
|
||||
// closeTable();//GateService
|
||||
// }
|
||||
|
||||
|
||||
// closeTable();
|
||||
|
||||
// //这没有开启跨服
|
||||
// if(!bHasServer)
|
||||
// {
|
||||
// GetLogicServer()->SetCommonServerAddr("","", 0,0,0);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch(RefString &s)
|
||||
// {
|
||||
// OutputMsg( rmNormal, s.rawStr() );
|
||||
// }
|
||||
// catch(...)
|
||||
// {
|
||||
// OutputMsg( rmNormal, _T("unexpected error on load config") );
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
|
||||
//读取跨服配置表
|
||||
bool CLogicServerConfig::LoadNewCrossClientConfig(CLogicServer *lpLogicServer, bool bReload)
|
||||
{
|
||||
if(!lpLogicServer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
bool result = false;
|
||||
CMemoryStream ms;
|
||||
try
|
||||
{
|
||||
if ( ms.loadFromFile(CROSSSERVER_SVR_ID_FILE) <= 0 )
|
||||
{
|
||||
showError(_T("unable to load config from file crossserver.config"));
|
||||
return result;
|
||||
}
|
||||
if ( !setScript((LPCSTR)ms.getMemory()) )
|
||||
{
|
||||
showError(_T("parse config script failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LPCSTR sVal;
|
||||
INT nVal = 0;
|
||||
int nDef = 0;
|
||||
|
||||
if ( openGlobalTable("LocalServerConfig"))
|
||||
{
|
||||
int nServerIndex = GetLogicServer()->GetServerIndex();
|
||||
// if ( feildTableExists("server") && openFieldTable("server"))
|
||||
// {
|
||||
// sVal = getFieldString("Address");
|
||||
// nVal = getFieldInt("Port");
|
||||
// if (NULL != sVal)
|
||||
// {
|
||||
// auto *pCrossServer = lpLogicServer->GetCrossServerManager();
|
||||
// if (pCrossServer)
|
||||
// {
|
||||
// pCrossServer->SetCrossServiceAddress(sVal, nVal);
|
||||
// lpLogicServer->SetCrossServer(true);
|
||||
// }
|
||||
|
||||
// }
|
||||
// closeTable();
|
||||
// }
|
||||
//当前服的ID
|
||||
int localId = getFieldInt("localId", &nDef);
|
||||
localId = nServerIndex + localId * CROSSSERVER_CALCULATE_PARAM;
|
||||
lpLogicServer->SetCrossServerId(localId);
|
||||
|
||||
// bool bHasServer =false;
|
||||
// if ( feildTableExists("client") && openFieldTable("client"))
|
||||
// {
|
||||
// sVal = getFieldString("Address");
|
||||
// nVal = getFieldInt("Port");
|
||||
// int nCrossServerIndex = getFieldInt("croessServerId",&nDef);
|
||||
// if (NULL != sVal && nCrossServerIndex != 0)
|
||||
// {
|
||||
// nCrossServerIndex = nCrossServerIndex*10000 + nServerIndex;
|
||||
// lpLogicServer->SetCrossServerId(nCrossServerIndex);
|
||||
// auto *pCrossClient = lpLogicServer->GetCrossClient();
|
||||
// if (pCrossClient)
|
||||
// {
|
||||
// pCrossClient->SetServerHost(sVal);
|
||||
// pCrossClient->SetServerPort(nVal);
|
||||
// // lpLogicServer->SetCrossServer(true);
|
||||
// }
|
||||
|
||||
// }
|
||||
// closeTable();
|
||||
// }
|
||||
closeTable();
|
||||
}
|
||||
}
|
||||
catch(RefString &s)
|
||||
{
|
||||
OutputMsg( rmNormal, s.rawStr() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
OutputMsg( rmNormal, _T("unexpected error on load config") );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//读取跨服配置表
|
||||
bool CLogicServerConfig::LoadNewCrossServerConfig(CLogicServer *lpLogicServer, bool bReload)
|
||||
{
|
||||
if(!lpLogicServer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// if (!lpLogicServer->IsCrossServer())
|
||||
// {
|
||||
// return false;//原服服务器不处理
|
||||
// }
|
||||
|
||||
bool result = false;
|
||||
CMemoryStream ms;
|
||||
try
|
||||
{
|
||||
//if ( ms.loadFromFile("./data/crossserver.config") <= 0 )
|
||||
if ( ms.loadFromFile(CROSSSERVER_CS_LOCAL_FILE) <= 0 )
|
||||
{
|
||||
showError(_T("unable to load config from file crossserver.config"));
|
||||
return result;
|
||||
}
|
||||
if ( !setScript((LPCSTR)ms.getMemory()) )
|
||||
{
|
||||
showError(_T("parse config script failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LPCSTR sVal;
|
||||
INT nVal = 0;
|
||||
int nDef = 0;
|
||||
|
||||
if ( openGlobalTable("crossserver"))
|
||||
{
|
||||
int nServerIndex = GetLogicServer()->GetServerIndex();
|
||||
if ( feildTableExists("server") && openFieldTable("server"))
|
||||
{
|
||||
sVal = getFieldString("Address");
|
||||
nVal = getFieldInt("Port");
|
||||
if (NULL != sVal)
|
||||
{
|
||||
auto *pCrossServer = lpLogicServer->GetCrossServerManager();
|
||||
if (pCrossServer)
|
||||
{
|
||||
pCrossServer->SetCrossServiceAddress(sVal, nVal);
|
||||
lpLogicServer->SetCrossServer(true);
|
||||
OutputMsg( rmTip, "[CSConfig] 为跨服服务器 CrossIP=[%s], Port=[%d]", sVal, nVal);
|
||||
}
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
}
|
||||
catch(RefString &s)
|
||||
{
|
||||
OutputMsg( rmNormal, s.rawStr() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
OutputMsg( rmNormal, _T("unexpected error on load config") );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//跨服读取配置表
|
||||
bool CLogicServerConfig::LoadLocalCSConfigByCross(CLogicServer *lpLogicServer, bool bReload)
|
||||
{
|
||||
if(!lpLogicServer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool result = false;
|
||||
CMemoryStream ms;
|
||||
try
|
||||
{
|
||||
if ( ms.loadFromFile(CROSSSERVER_CROSSSE_CONNECT_FILE) <= 0 )
|
||||
{
|
||||
showError(_T("unable to load config from file crossserver.config"));
|
||||
return result;
|
||||
}
|
||||
if ( !setScript((LPCSTR)ms.getMemory()) )
|
||||
{
|
||||
showError(_T("parse config script failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LPCSTR sVal;
|
||||
INT nVal = 0;
|
||||
int nDef = 0;
|
||||
|
||||
//if (lpLogicServer->IsCrossServer())
|
||||
//{
|
||||
// return false;//跨服服务器不处理
|
||||
//}
|
||||
|
||||
if ( openGlobalTable("CrossServerConfig"))
|
||||
{
|
||||
|
||||
int nServerIndex = lpLogicServer->GetServerIndex();
|
||||
int CsId = lpLogicServer->GetCrossServerId();
|
||||
|
||||
if(enumTableFirst()) {
|
||||
|
||||
do{
|
||||
if(enumTableFirst()) {
|
||||
do{
|
||||
CROSSSERVERCFG cfg;
|
||||
cfg.nPFid = getFieldInt("pfid",&nDef);
|
||||
cfg.nServerId = getFieldInt("serverid",&nDef);
|
||||
int nKeyCfg = cfg.nServerId + cfg.nPFid * CROSSSERVER_CALCULATE_PARAM;
|
||||
//cfg.nPort = getFieldInt("gate", &nDef);
|
||||
int nClientPort = getFieldInt("port", &nDef);
|
||||
int nSwitch = getFieldInt("switch", &nDef);
|
||||
getFieldStringBuffer(("localNamePR"), cfg.sLocalNamePR, sizeof(cfg.sLocalNamePR));
|
||||
// getFieldStringBuffer(("srvaddr"), cfg.sClientNet, sizeof(cfg.sClientNet));
|
||||
// getFieldStringBuffer(("CrossIP"), cfg.nCrossIP, sizeof(cfg.nCrossIP));
|
||||
//跨服不需要连接了
|
||||
// if(!nSwitch
|
||||
// && cfg.nPort != 0
|
||||
// && nKeyCfg == CsId)
|
||||
// {
|
||||
// auto *pCrossClient = lpLogicServer->GetCrossClient();
|
||||
// if (pCrossClient)
|
||||
// {
|
||||
// pCrossClient->SetServerHost(cfg.nCrossIP);
|
||||
// pCrossClient->SetServerPort(cfg.nPort);
|
||||
// OutputMsg( rmTip, "[CSConfig] 连接到跨服服务器 CrossIP=[%s], Port=[%d], nPFid=[%d], nServerId=[%d], SID=[%d], CSID=[%d]", cfg.nCrossIP, cfg.nPort, cfg.nPFid, cfg.nServerId, nServerIndex, CsId);
|
||||
// }
|
||||
// lpLogicServer->m_nCSGatePort = nClientPort;
|
||||
// memcpy(lpLogicServer->sClientNet, cfg.sClientNet, sizeof(cfg.sClientNet));
|
||||
|
||||
// // CSSourceInfo info;
|
||||
// // info.nkfid = getFieldInt("kfid", &nDef); //编号
|
||||
// // info.nServerId = nServerIndex;//getFieldInt("serverid", &nDef);
|
||||
// // //int nSwitch = getFieldInt("switch", &nDef);
|
||||
// // getFieldStringBuffer(("srvaddr"), info.sClientNet, sizeof(info.sClientNet));
|
||||
// // int nClientPort = getFieldInt("port", &nDef);
|
||||
// // info.gate = nClientPort;
|
||||
// // //getFieldStringBuffer(("localNamePR"), info.sLocalNamePR, sizeof(info.sLocalNamePR));
|
||||
// // getFieldStringBuffer(("CrossIP"), info.nCrossIP, sizeof(info.nCrossIP));
|
||||
// // info.nPort = getFieldInt("gate", &nDef);
|
||||
|
||||
// // lpLogicServer->GetLogicServerConfig()->m_mCSConfigSource[1] = info;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// OutputMsg( rmTip, "过滤跨服服务器 CrossIP=[%s], Port=[%d], nPFid=[%d], nServerId=[%d],", cfg.nCrossIP, cfg.nPort, cfg.nPFid, cfg.nServerId);
|
||||
// }
|
||||
if (feildTableExists("map") && openFieldTable("map")){
|
||||
cfg.nDestination = getFieldInt("id");
|
||||
//打开子表
|
||||
if (feildTableExists("range") && openFieldTable("range"))
|
||||
{
|
||||
if(enumTableFirst())
|
||||
{
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
if (i >= sizeof(cfg.nPointRange)/sizeof(int)) break;
|
||||
|
||||
cfg.nPointRange[i] = getFieldInt(NULL);
|
||||
i++;
|
||||
} while (enumTableNext());
|
||||
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
lpLogicServer->GetLogicServerConfig()->m_mCSConfigCross[nKeyCfg] = cfg;
|
||||
}while(enumTableNext());
|
||||
}
|
||||
}while(enumTableNext());
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
}
|
||||
catch(RefString &s)
|
||||
{
|
||||
OutputMsg( rmNormal, s.rawStr() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
OutputMsg( rmNormal, _T("unexpected error on load config") );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//原服读取配置表
|
||||
bool CLogicServerConfig::LoadLocalCSConfigBySource(CLogicServer *lpLogicServer, bool bReload)
|
||||
{
|
||||
if(!lpLogicServer)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool result = false;
|
||||
CMemoryStream ms;
|
||||
try
|
||||
{
|
||||
if ( ms.loadFromFile(CROSSSERVER_SOURCE_CONNECT_FILE) <= 0 )
|
||||
{
|
||||
showError(_T("unable to load config from file crossserver.config"));
|
||||
return result;
|
||||
}
|
||||
if ( !setScript((LPCSTR)ms.getMemory()) )
|
||||
{
|
||||
showError(_T("parse config script failed"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LPCSTR sVal;
|
||||
int nDef = 0;
|
||||
|
||||
if ( openGlobalTable("CrossSourceServerConfig"))
|
||||
{
|
||||
|
||||
int nServerIndex = lpLogicServer->GetServerIndex();
|
||||
int CsId = lpLogicServer->GetCrossServerId();
|
||||
|
||||
if(enumTableFirst())
|
||||
{
|
||||
do
|
||||
{
|
||||
CSSourceInfo info;
|
||||
info.nkfid = getFieldInt("kfid", &nDef); //编号
|
||||
info.nServerId = nServerIndex;//getFieldInt("serverid", &nDef);
|
||||
int nKeyCfg = info.nServerId + info.nkfid * CROSSSERVER_CALCULATE_PARAM;
|
||||
//int nSwitch = getFieldInt("switch", &nDef);
|
||||
getFieldStringBuffer(("GateAddr"), info.cGateAddr, sizeof(info.cGateAddr));
|
||||
int nGatePort = getFieldInt("GatePort", &nDef);
|
||||
info.nGatePort = nGatePort;
|
||||
//getFieldStringBuffer(("localNamePR"), info.sLocalNamePR, sizeof(info.sLocalNamePR));
|
||||
getFieldStringBuffer(("CrossIP"), info.cCrossIP, sizeof(info.cCrossIP));
|
||||
info.nCrossPort = getFieldInt("CrossPort", &nDef);
|
||||
if (feildTableExists("openday") && openFieldTable("openday"))
|
||||
{
|
||||
if(enumTableFirst())
|
||||
{
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
if (i >= 2)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(i == 0)
|
||||
{
|
||||
info.nOpenDayBegin = getFieldInt(NULL);
|
||||
}
|
||||
|
||||
if(i == 1)
|
||||
{
|
||||
info.nOpenDayEnd = getFieldInt(NULL);
|
||||
}
|
||||
|
||||
i++;
|
||||
} while (enumTableNext());
|
||||
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
if (feildTableExists("map") && openFieldTable("map"))
|
||||
{
|
||||
info.nDestination = getFieldInt("id");
|
||||
//打开子表
|
||||
if (feildTableExists("range") && openFieldTable("range"))
|
||||
{
|
||||
if(enumTableFirst())
|
||||
{
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
if (i >= sizeof(info.nPointRange)/sizeof(int)) break;
|
||||
|
||||
info.nPointRange[i] = getFieldInt(NULL);
|
||||
i++;
|
||||
} while (enumTableNext());
|
||||
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
|
||||
lpLogicServer->GetLogicServerConfig()->m_mCSConfigSource[info.nkfid] = info;
|
||||
|
||||
}while(enumTableNext());
|
||||
}
|
||||
closeTable();
|
||||
}
|
||||
}
|
||||
catch(RefString &s)
|
||||
{
|
||||
OutputMsg( rmNormal, s.rawStr() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
OutputMsg( rmNormal, _T("unexpected error on load config") );
|
||||
}
|
||||
int nOpenServerDay = GetLogicServer()->GetDaysSinceOpenServer();
|
||||
CSSourceInfo* info = GetLogicServer()->GetLogicServerConfig()->getCSConfigSourceByOpenday(nOpenServerDay);
|
||||
|
||||
if(!info)
|
||||
{
|
||||
OutputMsg( rmTip, "[CSConfig] 1跨服服务器 原服配置错:%d", nOpenServerDay);
|
||||
return true;
|
||||
}
|
||||
CLocalCrossClient *pCSClient = lpLogicServer->GetCrossClient();
|
||||
|
||||
if(!pCSClient)
|
||||
{
|
||||
OutputMsg( rmTip, "[CSConfig] 2跨服服务器 连接启动失败");
|
||||
return true;
|
||||
}
|
||||
|
||||
pCSClient->OnSetSrvHostPort(info->cCrossIP, info->nCrossPort);
|
||||
pCSClient->OnSetCsGateAddr(info->cGateAddr);
|
||||
pCSClient->OnSetCsGatePort(info->nGatePort);
|
||||
|
||||
std::string str = info->cGateAddr;
|
||||
str += ":";
|
||||
str += utility::toString(info->nGatePort);
|
||||
str += _T("跨服逻辑");
|
||||
pCSClient->SetClientName(str);
|
||||
// pCSClient->SetServerHost(info.nCrossIP);
|
||||
// pCSClient->SetServerPort(info.nPort);
|
||||
OutputMsg( rmTip, "[CSConfig] 连接到跨服服务器 CrossIP=[%s], Port=[%d], nServerId=[%d] ", info->cCrossIP, info->nCrossPort, info->nServerId);
|
||||
|
||||
lpLogicServer->m_nCSGatePort = info->nGatePort;
|
||||
lpLogicServer->m_cGateAddr = info->cGateAddr;
|
||||
|
||||
return true;
|
||||
}
|
||||
//原服配置
|
||||
CSSourceInfo* CLogicServerConfig::getCSConfigSourceByOpenday(int tDaytime)
|
||||
{
|
||||
std::map<int, CSSourceInfo>::iterator it = m_mCSConfigSource.begin();
|
||||
for (; it != m_mCSConfigSource.end(); it++)
|
||||
{
|
||||
CSSourceInfo &temp = it->second;
|
||||
if (tDaytime >= temp.nOpenDayBegin)
|
||||
{
|
||||
if (tDaytime <= temp.nOpenDayEnd
|
||||
|| temp.nOpenDayEnd == -1)
|
||||
{
|
||||
return &temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user