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 + -
显示快捷键?