relayserver.cpp
来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C++ 代码 · 共 240 行
CPP
240 行
#include "stdafx.h"
#include "RelayServer.h"
#include "msgHandler.h"
#ifdef _LOG_GAMELOGIC
char log_result[1024];
char *log_mode[] = {"MODE_NONE", "MODE_NORMAL", "MODE_CLAN", "MODE_SURVIVAL", "MODE_DEATH", "MODE_FLAG", "MODE_STRIKE"};
#else ifdef _DBG_GAMELOGIC
char log_result[1024];
char *log_mode[] = {"MODE_NONE", "MODE_NORMAL", "MODE_CLAN", "MODE_SURVIVAL", "MODE_DEATH", "MODE_FLAG", "MODE_STRIKE"};
#endif
CRelayServer g_cRelayServer;
extern float fs_frame;
CRelayServer::CRelayServer()
{
m_msgInfo = NULL;
}
CRelayServer::~CRelayServer()
{
net_free();
SAFE_DELETE(m_msgInfo);
}
void CRelayServer::LoadINI()
{
//辑滚矫胶袍
GetPrivateProfileString("SYSTEM", "MASTERSERVER_IP", NULL, m_cConfig.sys_master_ip, sizeof(m_cConfig.sys_master_ip), RSINIT);
m_cConfig.sys_master_port = GetPrivateProfileInt("SYSTEM", "MASTERSERVER_PORT", 0, RSINIT);
m_cConfig.sys_port_udp = GetPrivateProfileInt("SYSTEM", "UDP_PORT", 0, RSINIT);
m_cConfig.sys_maxuser = GetPrivateProfileInt("CONFIG", "MAX_USER", 0, RSINIT);
m_cConfig.sys_maxlocal = GetPrivateProfileInt("SYSTEM", "MAX_LOCAL", 1, RSINIT);
m_cConfig.sys_frame = GetPrivateProfileInt("SYSTEM", "FS_FRAME", 120, RSINIT);
m_cConfig.sys_account = GetPrivateProfileInt("SYSTEM", "ACCOUNT", 0, RSINIT);
m_cConfig.sys_udp_cnt = GetPrivateProfileInt("SYSTEM", "UDP_COUNT", 0, RSINIT);
}
BOOL CRelayServer::SetupSystem()
{
fs_frame = (float)m_cConfig.sys_frame;
return TRUE;
}
BOOL CRelayServer::SetupNetwork()
{
void (*ThreadFunc[40])(void *) = {AverageThread, NULL, };
void *ThreadParam[40] = {NULL, NULL, };
net_init(1, _printf);
net_setup(CallbackConnect, CallbackRecv, CallbackClose, ThreadFunc, ThreadParam, 1);
if(!net_startup(m_cConfig.sys_port_udp, m_cConfig.sys_udp_cnt))
return FALSE;
m_msgInfo = new MSGINFO;
return TRUE;
}
void CRelayServer::AverageThread(void *pArg)
{
Sleep(1000);
if(g_cRelayServer.m_bExit) return;
void *ioc = net_message(M_RELAYSERVER, S_LOAD_BALANCE);
if(ioc)
{
UINT64 nRecvSize;
int i=0;
while(i < g_cRelayServer.m_cConfig.sys_udp_cnt)
{
nRecvSize = udp_total_recvsize(i);
net_packet(ioc, &nRecvSize, 1);
++i;
}
g_cRelayServer.SendMaster(ioc);
}
udp_total_recvclear();
}
BOOL CRelayServer::Init()
{
LoadINI();
if(!SetupSystem())
{
_printf("InitError[CRelayServer::SetupSystem() == false] CRelayServer::Init()\n");
return FALSE;
}
if(!SetupNetwork())
{
_printf("InitError[CRelayServer::SetupNetwork() == false] CRelayServer::Init()\n");
return FALSE;
}
if(!CServer::Init(0))
{
_printf("InitError[CServer::Init() == false] CRelayServer::Init()\n");
return FALSE;
}
#ifdef _MODE_SERVICE
if(!net_connect(m_cConfig.sys_master_ip, m_cConfig.sys_master_port, NET_COMMON, S_HEARTBEAT))
return FALSE;
#else
if(!net_connect(m_cConfig.sys_master_ip, m_cConfig.sys_master_port, USE_SECURITYPACK, S_HEARTBEAT))
return FALSE;
#endif
m_bRun = TRUE;
return TRUE;
}
CClient *CRelayServer::OnAccept(int nSockIndex, DWORD dwAddr)
{
return NULL;
}
void CRelayServer::OnConnect(int nSockIndex, char *pAddr, WORD wPort)
{
m_cConfig.sys_master_server = (short)nSockIndex;
}
void CRelayServer::OnClose(int nSockIndex, bool bNormal)
{
}
void CRelayServer::OnRecv(int nSockIndex, int nMessage, DWORD dwErrCode, char *pPacket, DWORD *pSize)
{
switch(MAIN(nMessage))
{
case M_MASTERSERVER:
switch(SUB(nMessage))
{
case S_CLOSED:
_printf("**********************************exception************************************\n");
_log("ConnectError[MASTERSERVER] CRelayServer::OnRecv() > S_CLOSED");
break;
case S_AUTHOR:
#ifdef _DBG_ENGINE
_printf("[%d:%u] M_MASTERSERVER::S_AUTHOR\n", nSockIndex, GetTickCount());
#endif
msrs_author(nSockIndex, pPacket);
break;
case S_VERIFY:
#ifdef _DBG_ENGINE
_printf("[%d:%u] M_MASTERSERVER::S_VERIFY(OK)\n", nSockIndex, GetTickCount());
#endif
msrs_verify(nSockIndex, pPacket);
break;
case S_LOGIN:
#ifdef _DBG_ENGINE
_printf("[%d:%u] M_MASTERSERVER::S_LOGIN\n", nSockIndex, GetTickCount());
#endif
msrs_login(nSockIndex, pPacket);
break;
}
break;
}
}
BOOL CRelayServer::Run()
{
if(!CServer::Run())
return FALSE;
net_setevent(0, true);
return TRUE;
}
BOOL CRelayServer::IsStopping()
{
return TRUE;
}
BOOL CRelayServer::SendMaster(void *ioc)
{
return net_send(m_cConfig.sys_master_server, ioc);
}
void CRelayServer::Open()
{
char *szMode[] = {"烹钦", "辑官捞国", "单胶概摹", "标惯", "痢飞"};
char *pAddr, *pDomain;
if(!net_info(pAddr, pDomain)) return;
char szTitle[256];
if(m_cConfig.sys_mode)
{
if(m_cConfig.sys_udp_cnt > 1)
{
sprintf(szTitle, "%s:%s - %s - %s:%d~%d - %s",
m_cConfig.sys_name, m_cConfig.sys_group, m_cConfig.sys_type, szMode[m_cConfig.sys_mode],
pAddr, m_cConfig.sys_port_udp, m_cConfig.sys_port_udp + m_cConfig.sys_udp_cnt - 1, pDomain);
}
else
{
sprintf(szTitle, "%s:%s - %s - %s:%d - %s",
m_cConfig.sys_name, m_cConfig.sys_group, m_cConfig.sys_type, szMode[m_cConfig.sys_mode],
pAddr, m_cConfig.sys_port_udp, pDomain);
}
}
else
{
if(m_cConfig.sys_udp_cnt > 1)
{
sprintf(szTitle, "%s:%s - %s - %s:%d~%d - %s",
m_cConfig.sys_name, m_cConfig.sys_group, m_cConfig.sys_type,
pAddr, m_cConfig.sys_port_udp, m_cConfig.sys_port_udp + m_cConfig.sys_udp_cnt - 1, pDomain);
}
else
{
sprintf(szTitle, "%s:%s - %s - %s:%d - %s",
m_cConfig.sys_name, m_cConfig.sys_group, m_cConfig.sys_type,
pAddr, m_cConfig.sys_port_udp, pDomain);
}
}
_console_title(szTitle);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?