894 lines
24 KiB
C++
894 lines
24 KiB
C++
#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;
|
||
}
|
||
|