local.cpp

来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C++ 代码 · 共 201 行

CPP
201
字号
#include "stdafx.h"
#include "MasterServer.h"
#include "Manager.h"
#include "local.h"
#include "user.h"


CLocal::CLocal()
{
	m_pMap = NULL;
	m_pAuthIndex = NULL;
	m_pAuthCode = NULL;

	m_wPort = 0;
	m_iList = -1;

	m_lStartTime = 0;
	m_lEndTime = 0;

	m_nUserCnt = 0;
	m_nUserMax = 0;

	m_nCurPacketSize = 0;
	m_nMaxPacketSize = 0;
	m_pPacketSize = NULL;
}

CLocal::~CLocal()
{
	SAFE_DELETE_ARRAY(m_pMap);
	SAFE_DELETE_ARRAY(m_pAuthIndex);
	SAFE_DELETE_ARRAY(m_pAuthCode);
	SAFE_DELETE_ARRAY(m_pPacketSize);
}

void CLocal::Init(int nSockIndex)
{
	m_nAccount = g_cMasterServer.m_cLocalConn.account[nSockIndex];

	if(!strcmp(g_cMasterServer.m_cLocalConn.type[nSockIndex], "MASTERSERVER"))
	{
		//付胶磐辑滚 府胶飘沥焊 技泼

		char *pAddr, *pDomain;
		net_info(pAddr, pDomain);

		m_nType = M_MASTERSERVER;
		m_nState = STATE_DISCONNECT;
		m_dwRemoteIP = inet_addr(pAddr);
		m_wPort = g_cMasterServer.m_cConfig.sys_port_tcp;

		g_cMasterServer.m_cConfig.sys_account = m_nAccount;
	}
	else if(!strcmp(g_cMasterServer.m_cLocalConn.type[nSockIndex], "LOBBYSERVER"))
		m_nType = M_LOBBYSERVER;
	else if(!strcmp(g_cMasterServer.m_cLocalConn.type[nSockIndex], "GAMESERVER"))
		m_nType = M_GAMESERVER;
	else if(!strcmp(g_cMasterServer.m_cLocalConn.type[nSockIndex], "PATCHSERVER"))
		m_nType = M_PATCHSERVER;
	else if(!strcmp(g_cMasterServer.m_cLocalConn.type[nSockIndex], "RELAYSERVER"))
		m_nType = M_RELAYSERVER;
	else
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d TypeError[type == %s] CLocal::Init()", m_nIndex, g_cMasterServer.m_cLocalConn.type[nSockIndex]);
		return;
	}

	strcpy(m_szName, g_cMasterServer.m_cLocalConn.name[nSockIndex]);
	if(g_cMasterServer.m_cLocalConn.mode[nSockIndex])
	{
		strcpy(m_szMode, g_cMasterServer.m_cLocalConn.mode[nSockIndex]);

		//狐弗 贸府甫 困秦 葛靛甫 沥荐屈栏肺..
		if(!strcmp(m_szMode, "辑官捞国葛靛"))
			m_nMode = MODE_SURVIVAL;
		else if(!strcmp(m_szMode, "痢飞葛靛"))
			m_nMode = MODE_STRIKE;
		else
		{
			strcpy(m_szMode, "None");
			m_nMode = MODE_NONE;	//俊矾寸;
		}
	}
	else
	{
		strcpy(m_szMode, "None");
		m_nMode = MODE_NONE;		//俊矾酒聪寸
	}

	g_cMasterServer.GetManager()->SetServerList(this);
}

void CLocal::Open()
{
	CClient::Open();

	if(m_nType == M_MASTERSERVER)
	{
		m_nState = STATE_LOGIN;
		m_lStartTime = time(NULL);

		g_cMasterServer.GetManager()->SetInfoServerStart(this);
	}

	g_cMasterServer.GetManager()->SetServerList(this);
}

BOOL CLocal::Insert(DWORD dwAddr, WORD wPort)
{
	if(m_nState != STATE_DISCONNECT)
	{
		IN_ADDR in_addr;
		in_addr.s_addr = dwAddr;

		if(m_nState == STATE_CLOSE)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d StateError[!STATE_DISCONNECT] CLocal::Insert() > 牢刘登瘤 臼篮 肺拿辑滚 立加[%s:%s]", m_nIndex, inet_ntoa(in_addr), GetStateLog());
			return FALSE;
		}

		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[!STATE_DISCONNECT] CLocal::Insert() > 捞固 劝己拳等 家南俊 肺拿辑滚 吝汗立加[%s:%s]", m_nIndex, inet_ntoa(in_addr), GetStateLog());
		return FALSE;
	}

	m_nState = STATE_CONNECT;
	m_dwRemoteIP = dwAddr;
	m_wPort = wPort;

	m_nUserCnt = 0;
	m_nUserMax = 0;
	m_nCurPacketSize = 0;
	m_nMaxPacketSize = 0;

	return TRUE;
}

void CLocal::SetInfo(char **pInfoPack)
{
	//肺拿辑滚 沥焊技泼
	net_data(pInfoPack, &m_nUserLimit, 1);

	if(m_nType == M_GAMESERVER)
	{
		net_data(pInfoPack, &m_nMapCnt, 1);

		SAFE_DELETE_ARRAY(m_pMap);
		m_pMap = new BYTE[m_nMapCnt];

		net_data(pInfoPack, m_pMap, m_nMapCnt);
	}
	else if(m_nType == M_RELAYSERVER)
	{
		SAFE_DELETE_ARRAY(m_pPacketSize);
		m_pPacketSize = new UINT64[m_nUserLimit];

		memset(m_pPacketSize, 0, sizeof(UINT64) * m_nUserLimit);
	}

	m_nState = STATE_JOINLOGIN;
}

void CLocal::Join()
{
#ifdef _DBG_ENGINE
	_printf("辑滚眠啊(%s)\n", m_szName);
#endif

	m_nState = STATE_LOGIN;
	m_lStartTime = time(NULL);

	if(m_nType == M_LOBBYSERVER)
		msc_server_add(m_nIndex);

	g_cMasterServer.GetManager()->SetInfoServerStart(this);
	g_cMasterServer.GetManager()->SetServerList(this);
}

void CLocal::Delete()
{
#ifdef _DBG_ENGINE
	_printf("辑滚 辆丰(%s)\n", m_szName);
#endif

	if(m_nType == M_LOBBYSERVER && m_nState == STATE_LOGIN)
		msc_server_delete(m_nIndex);

	if(m_nState != STATE_CLOSE)
	{
		m_nState = STATE_DISCONNECT;
		m_lEndTime = time(NULL);

		g_cMasterServer.GetManager()->SetInfoServerEnd(this);
	}

	g_cMasterServer.m_cpUser[m_nIndex].Delete();	//秦寸 蜡历抛捞喉档 立加檬扁拳 茄促
	g_cMasterServer.GetManager()->SetServerList(this);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?