msghandler.cpp

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

CPP
1,848
字号
#include "stdafx.h"
#include "spHandler.h"
#include "msgHandler.h"
#include "MasterServer.h"
#include "manager.h"
#include "user.h"
#include "local.h"


extern char use_type[];

void msc_dummy(int id, char *packet, DWORD msg, DWORD size)
{
	_printf("Message:DUMMY%d[%d][%d]\n", msg, MAIN(msg), SUB(msg));
	void *ioc = net_message(MAIN(msg), SUB(msg), 0);
	if(ioc)
	{
		net_packet(ioc, packet, size);

		if(!net_send(id, ioc))
			net_disconnect(id, false);
	}
}

void sms_author(int id, char *packet)
{
	CUser *pUser = (CUser *)g_cMasterServer.GetClient(id);
	if(!pUser)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d IndexError[local == NULL] sms_author()", id);
		return;
	}
	if(pUser->m_nState != CClient::STATE_CONNECT)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[state != STATE_CONNECT] sms_author() > 泅犁 辑滚惑怕[%s]", pUser->m_nIndex, pUser->GetStateLog());
		return;
	}

	UINT64 account;
	WORD port;
	net_data(&packet, &account, 1);
	net_data(&packet, &port, 1);

	int i=g_cMasterServer.m_cLocalConn.local_cnt;
	while(i--)
	if(g_cMasterServer.m_cpLocal[i].m_nAccount == account)
	{
		if(g_cMasterServer.m_cpLocal[i].Insert(pUser->m_dwRemoteIP, port))
		{
			g_cMasterServer.SetClient(pUser->m_nIndex, (CClient *)&g_cMasterServer.m_cpLocal[i]);
			spsel_server_author(pUser->m_nIndex);
		}
	}
}

void sms_login(int id, char *packet)
{
	CLocal *pLocal = (CLocal *)g_cMasterServer.GetClient(id);
	if(!pLocal)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d IndexError[local == NULL] sms_login()", id);
		return;
	}
	if(pLocal->m_nState != CClient::STATE_CONNECT)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[state != STATE_CONNECT] sms_login() > 泅犁 辑滚惑怕[%s]", pLocal->m_nIndex, pLocal->GetStateLog());
		return;
	}

	//肺弊牢 牢刘例瞒 积帆

	pLocal->SetInfo(&packet);
	void *ioc;

	if(pLocal->m_nType == M_LOBBYSERVER || pLocal->m_nType == M_GAMESERVER)
	{
		//肺拿辑滚俊 酒捞袍肮荐 殿 悸诀包访 沥焊甫 焊辰促
		if((ioc = net_message(M_MASTERSERVER, S_CONFIG_ITEM, 0)))
		{
			net_packet(ioc, g_cMasterServer.m_cpItemMap->m_wItemCnt, ITEM_MAXTYPE);

			if(!net_send(pLocal->m_nIndex, ioc))
				net_disconnect(pLocal->m_nIndex, false);
		}

		BYTE list_len, list_type = LIST_END;
		int j, i=0;

		//阿 肺拿辑滚俊 鞘夸茄 酒捞袍沥焊甫 傈价茄促(酒捞袍捞 茄俺档 绝栏搁 S_CONFIG_ITEMLIST绰 焊郴瘤 臼绰促)
		while(i < ITEM_MAXTYPE)
		{
			//秦寸鸥涝俊 酒捞袍捞 乐栏搁 傈价茄促
			if(g_cMasterServer.m_cpItemMap->m_wItemCnt[i])
			{
				ioc = net_message(M_MASTERSERVER, S_CONFIG_ITEMLIST, 0);
				list_len = net_packet(ioc, (char *)&i, 1);

				j=0;
				while(j < g_cMasterServer.m_cpItemMap->m_wItemCnt[i])
				{
					if(g_cMasterServer.m_cpItemMap->m_pItem[i][j] == NULL)
					{
						++j;
						continue;
					}

					if(pLocal->m_nType == M_LOBBYSERVER)
						list_len += g_cMasterServer.m_cpItemMap->m_pItem[i][j++]->SetListLobbyData(ioc);
					else
						list_len += g_cMasterServer.m_cpItemMap->m_pItem[i][j++]->SetListGameData(ioc);

					if(list_len >= LEN_LISTBUF)	//府胶飘 力茄阑 哈绢车促
						break;
				}

				net_packet(ioc, &list_type, 1);

				if(!net_send(pLocal->m_nIndex, ioc))
					net_disconnect(pLocal->m_nIndex, false);
			}
			++i;
		}
	}

	if((ioc = net_message(M_MASTERSERVER, S_LOGIN, 0)))
	{
		net_packet(ioc, &pLocal->m_nIndex, 1);
		net_packet(ioc, &pLocal->m_nMode, 1);

		BYTE nLen = (BYTE)strlen(pLocal->m_szName);
		net_packet(ioc, &nLen, 1);
		net_packet(ioc, pLocal->m_szName, nLen);

		nLen = (BYTE)strlen(g_cMasterServer.m_cConfig.sys_name);
		net_packet(ioc, &nLen, 1);
		net_packet(ioc, g_cMasterServer.m_cConfig.sys_name, nLen);

		nLen = (BYTE)strlen(g_cMasterServer.m_cConfig.sys_group);
		net_packet(ioc, &nLen, 1);
		net_packet(ioc, g_cMasterServer.m_cConfig.sys_group, nLen);

		if(!net_send(pLocal->m_nIndex, ioc))
			net_disconnect(pLocal->m_nIndex, false);
	}
}

void sms_open(int id)
{
	CLocal *pLocal = (CLocal *)g_cMasterServer.GetClient(id);
	if(!pLocal)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d IndexError[local == NULL] sms_open()", id);
		return;
	}
	if(pLocal->m_nState != CClient::STATE_JOINLOGIN)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[state != STATE_JOINLOGIN] sms_open() > 泅犁 辑滚惑怕[%s]", pLocal->m_nIndex, pLocal->GetStateLog());
		return;
	}

	pLocal->Join();
}

void sms_user_cnt(int id, char *packet, DWORD size)
{
	CLocal *pLocal = (CLocal *)g_cMasterServer.GetClient(id);
	if(!pLocal)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d IndexError[local == NULL] sms_user_cnt()", id);
		return;
	}
	if(pLocal->m_nState != CClient::STATE_LOGIN)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[state != STATE_LOGIN] sms_user_cnt() > 泅犁 辑滚惑怕[%s]", pLocal->m_nIndex, pLocal->GetStateLog());
		return;
	}

	UINT64 account;
	bool player;
	void *ioc;

	net_data(&packet, &pLocal->m_nUserCnt, 1);

	//info扩档狼 郴侩 盎脚
	g_cMasterServer.GetManager()->SetInfoUserCnt(pLocal);

	if(pLocal->m_nType == M_LOBBYSERVER)	//霸烙辑滚俊 蜡历立加辆丰 舅覆 棺 蜡历 立加辑滚 檬扁拳
	{
		net_data(&packet, &account, 1);
		net_data(&packet, &player, 1);

		if(!account)
		{
			_printf("**********************************exception************************************\n");
			_log("LOBBY%d IndexError[account == 0] sms_user_cnt()", pLocal->m_nIndex);
			return;
		}

		spupd_game_logout(account);			//蜡历 辑滚困摹 盎脚

		if(!player)
		{
#ifdef _DBG_ENGINE
			_printf("ACCOUNT%I64d [措扁吝牢 蜡历 OUT] sms_user_cnt() > 霸烙辑滚俊 舅副 鞘夸 绝澜\n", account);
#endif
			return;					//措扁吝捞看扁 锭巩俊 霸烙辑滚俊 舅副鞘夸 绝促
		}

		short game_serverindex, game_userindex;

		net_data(&packet, &game_serverindex, 1);
		net_data(&packet, &game_userindex, 1);

		CLocal *pGame = (CLocal *)g_cMasterServer.GetClient(game_serverindex);
		if(!pGame)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d IndexError[local == NULL] sms_user_cnt()", game_serverindex);
			return;
		}
		if(pGame->m_nState != CClient::STATE_LOGIN)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d StateError[state != STATE_LOGIN] sms_user_cnt() > 泅犁 辑滚惑怕[%s]", pGame->m_nIndex, pGame->GetStateLog());
			return;
		}
		if(pGame->m_nType != M_GAMESERVER)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d TypeError[type != M_GAMESERVER] sms_user_cnt()", pGame->m_nIndex);
			return;
		}

		if((ioc = net_message(M_MASTERSERVER, MSGS_GAME_OUT, 0)))
		{
			net_packet(ioc, &game_userindex, 1);
			net_packet(ioc, &account, 1);

			net_send(pGame->m_nIndex, ioc);
		}

#ifdef _DBG_ENGINE
		_printf("LOBBY%I64d [USEROUT:%d/%d]\n", pLocal->m_nAccount, pLocal->m_nUserCnt, pLocal->m_nUserLimit);
#endif
		return;
	}

	if(pLocal->m_nType == M_GAMESERVER)		//肺厚辑滚俊 蜡历 霸烙搬苞 舅覆 棺 DB历厘
	{
		short lobby_serverindex, lobby_userindex;

		net_data(&packet, &account, 1);

		if(!account)
		{
			_printf("**********************************exception************************************\n");
			_log("GAME%d IndexError[account == 0] sms_user_cnt()", pLocal->m_nIndex);
			return;
		}

		net_data(&packet, &player, 1);
		net_data(&packet, &lobby_serverindex, 1);
		net_data(&packet, &lobby_userindex, 1);

		CLocal *pLobby = (CLocal *)g_cMasterServer.GetClient(lobby_serverindex);
		if(!pLobby)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d IndexError[local == NULL] sms_user_cnt()", lobby_serverindex);
			return;
		}
		if(pLobby->m_nState != CClient::STATE_LOGIN)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d StateError[state != STATE_LOGIN] sms_user_cnt() > 泅犁 辑滚惑怕[%s]", pLobby->m_nIndex, pLobby->GetStateLog());
			return;
		}
		if(pLobby->m_nType != M_LOBBYSERVER)
		{
			_printf("**********************************exception************************************\n");
			_log("LOCAL%d TypeError[type != M_LOBBYSERVER] sms_user_cnt()", pLobby->m_nIndex);
			return;
		}

		if(!player)
		{
			if((ioc = net_message(M_MASTERSERVER, MSLS_GAME_OUT, 0)))
			{
				net_packet(ioc, &lobby_userindex, 1);
				net_packet(ioc, &account, 1);
				net_packet(ioc, &player, 1);

				net_send(pLobby->m_nIndex, ioc);
			}

#ifdef _DBG_ENGINE
			_printf("ACCOUNT%I64d [包傈吝牢 蜡历 OUT] sms_user_cnt() > 肺厚辑滚俊 盎脚沥焊 傈价且 鞘夸 绝澜\n", account);
#endif
			return;					//包傈吝捞看扁 锭巩俊 肺厚辑滚俊 盎脚沥焊甫 傈价且 鞘夸 绝促
		}							//肚, DB历厘档 且 鞘夸绝促

		ITEM_INFO item_info[WEAPON_MAX];
		MSGINFO *msg = g_cMasterServer.GetMsgObj();

		net_data(&packet, &msg->mslsGameOut, 1);
		net_data(&packet, item_info, WEAPON_MAX);

		if((ioc = net_message(M_MASTERSERVER, MSLS_GAME_OUT, 0)))
		{
			net_packet(ioc, &lobby_userindex, 1);
			net_packet(ioc, &account, 1);
			net_packet(ioc, &player, 1);
			net_packet(ioc, &msg->mslsGameOut, 1);
			net_packet(ioc, item_info, WEAPON_MAX);

			net_send(pLobby->m_nIndex, ioc);
		}

		spupd_game_result(account, msg->mslsGameOut.mechanic, msg->mslsGameOut.level, msg->mslsGameOut.exp,
								msg->mslsGameOut.point, msg->mslsGameOut.kill_cnt, msg->mslsGameOut.death_cnt,
								msg->mslsGameOut.win, msg->mslsGameOut.quit, item_info);

#ifdef _DBG_ENGINE
		_printf("GAME%I64d [USEROUT:%d/%d]\n", pLocal->m_nAccount, pLocal->m_nUserCnt, pLocal->m_nUserLimit);
#endif
		return;
	}
}

void sms_author_info(int id, char *packet, DWORD size)
{
	CLocal *pLocal = (CLocal *)g_cMasterServer.GetClient(id);
	if(!pLocal)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d IndexError[local == NULL] sms_author_info()", id);
		return;
	}
	if(pLocal->m_nState != CClient::STATE_LOGIN)
	{
		_printf("**********************************exception************************************\n");
		_log("LOCAL%d StateError[state != STATE_LOGIN] sms_author_info() > 泅犁 辑滚惑怕[%s]", pLocal->m_nIndex, pLocal->GetStateLog());
		return;
	}

	void *ioc = net_message(M_MASTERSERVER, S_AUTHOR_INFO, 0);
	if(ioc)
	{
		net_packet(ioc, packet, size);
		net_packet(ioc, &g_cMasterServer.m_cConfig.sys_auth_size, 1);
		net_packet(ioc, &g_cMasterServer.m_cConfig.sys_auth_cnt, 1);
		net_packet(ioc, g_cMasterServer.m_cConfig.sys_auth_index, g_cMasterServer.m_cConfig.sys_auth_cnt);
		net_packet(ioc, g_cMasterServer.m_cConfig.sys_auth_code, g_cMasterServer.m_cConfig.sys_auth_cnt);

		if(!net_send(pLocal->m_nIndex, ioc))
			net_disconnect(pLocal->m_nIndex, false);
	}
}

void cms_author_code(int id, char *packet)
{
	CUser *pUser = (CUser *)g_cMasterServer.GetClient(id);

⌨️ 快捷键说明

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