⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgconnect.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
字号:
// MsgConnect.cpp: implementation of the CMsgConnect class.
//
//////////////////////////////////////////////////////////////////////
#include "AllMsg.h"
#include "UserList.h"
#include "logfile.h"
using namespace world_kernel;
#include "WorldKernel.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMsgConnect::CMsgConnect()
{
	Init();
	m_pInfo	=(MSG_Info *)m_bufMsg;

}

CMsgConnect::~CMsgConnect()
{

}

//////////////////////////////////////////////////////////////////////
BOOL CMsgConnect::Create(OBJID idAccount, DWORD dwData, char* pszInfo)
{
	// param check
	if (!pszInfo || strlen(pszInfo) >= _MAX_NAMESIZE)
		return false;
	
	// init
	this->Init();

	// fill info now
	m_unMsgSize	=sizeof(MSG_Info);
	m_unMsgType	=_MSG_CONNECT;

	m_pInfo->idAccount		=idAccount;
	m_pInfo->dwData			=dwData;
	strcpy(m_pInfo->szInfo, pszInfo);

	return true;
}

//////////////////////////////////////////////////////////////////////
BOOL CMsgConnect::Create(char* pbufMsg, DWORD dwMsgSize)
{
	if (!CNetMsg::Create(pbufMsg, dwMsgSize))
		return false;

	if(_MSG_CONNECT != this->GetType())
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
void CMsgConnect::Process(void* pSocket)
{
#ifdef _MYDEBUG_X
	::LogSave("Process CMsgConnect, idAccount:%u, Data:%d, Info:%s",
				m_pInfo->idAccount,
				m_pInfo->dwData,
				m_pInfo->szInfo);
#endif

	if (!pSocket || m_pInfo->idAccount == ID_NONE)
		return;

	int nVersion = 0;
	if (1 != sscanf(m_pInfo->szInfo, "%d", &nVersion))
	{
		CMsgTalk msg;
		if(msg.Create(SYSTEM_NAME, ALLUSERS_NAME, STR_ERROR_VERSION, NULL, _COLOR_WHITE, _TXTATR_ENTRANCE))
			SendMsg(&msg);
		return;
	}
#ifdef	PALED_DEBUG
#else
	if (nVersion < GAME_VERSION)
	{
		CMsgTalk msg;
		if(msg.Create(SYSTEM_NAME, ALLUSERS_NAME, STR_ERROR_LOWER_VERSION, NULL, _COLOR_WHITE, _TXTATR_ENTRANCE))
			SendMsg(&msg);
		return;
	}
#endif
	extern DWORD g_dwMaxPlayer;
	if(GameWorld()->QueryUserList()->GetUserAmount() > g_dwMaxPlayer && m_pInfo->idAccount > MAX_GM_ID)
	{
		CMsgTalk msg;
		if(msg.Create(SYSTEM_NAME, ALLUSERS_NAME, STR_ERROR_SERVER_FULL, NULL, _COLOR_WHITE, _TXTATR_ENTRANCE))
			SendMsg(&msg);
		return;
	}

	// 接收完了MSG_CONNECT后,用认证号重置密码。
	DWORD dwEncyptCode = (m_pInfo->idAccount+m_pInfo->dwData)^0x4321;
	GameWorld()->ChangeCode(GetSocketID(), m_pInfo->dwData^dwEncyptCode);

	if(GameWorld()->ClientConnect(m_pInfo->idAccount, m_pInfo->dwData, m_pInfo->szInfo, this->GetSocketID()))
	{
		CPlayer* pPlayer	= g_UserList.GetPlayerByAccountID(m_pInfo->idAccount);
		ASSERT(pPlayer);
		if(pPlayer)
			UserList()->LoginToMapGroup(pPlayer);
	}
}

⌨️ 快捷键说明

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