📄 rmproc.cpp
字号:
memcpy(&count, pMsg+3+filelen, 1);
int offset = 4+filelen;
for(int i=0 ; i<count ; i++)
{
memcpy(&servertype, pMsg+offset, 1);
offset += 1;
memcpy(&port, pMsg+offset, 2);
offset += 2;
dwIndex = g_pRMTable->GetListenerConnectionIndex(port);
if(!CheckValidConnectionIndex(dwIndex))
{
//Added by KBS 020110
MyLog(LOG_NORMAL,"MSG_RM_EXECUTE_SERVER :: Invalid Listener connection index(port: %d).", port);
continue;
}
PACKET_LISTENER_SERVER_EXCUTE packet(servertype, port, szExeName);
g_pINet->SendToServer(dwIndex, (char*)&packet,packet.GetPacketSize(),FLAG_SEND_NOT_ENCRYPTION);
}
}
break;
case MSG_RM_RELOAD_DATA: //Reload Gameserver Data
{
BYTE count = pMsg[2];
int offset = 3;
WORD wPort;
LP_SERVER_DATA pData;
PACKET_RELOAD_GAMESERVER_DATA packet;
for(int i=0; i<count; i++)
{
memcpy(&wPort, pMsg + offset, 2);
pData = g_pServerTable->GetServerData(wPort);
offset += 2;
if(!pData) continue;
if(pData->dwConnectionIndex == 0) continue;
g_pINet->SendToServer(pData->dwConnectionIndex, (char*)&packet, packet.GetPacketSize(), FLAG_SEND_NOT_ENCRYPTION);
}
}
break;
case MSG_RM_NOTICE:
{
WORD wPort;
LP_SERVER_DATA pServerData;
//Length of Notice Message
WORD msgLen;
memcpy(&msgLen, pMsg + 2 , 2);
//Notice Message
char msg[ 2048 ];
memcpy(msg, pMsg + 4, msgLen);
msg[ msgLen ] = '\0';
//Numer of Server
BYTE num = pMsg[ msgLen + 4 ];
int offset = msgLen + 5;
for(int i=0; i< num; i++)
{
memcpy(&wPort, pMsg + offset, 2);
pServerData = g_pServerTable->GetServerData(wPort);
offset += 2;
if(!pServerData) continue;
if(pServerData->dwConnectionIndex == 0) continue;
//BBS 菩哦 傈价何盒
MANAGER_TO_MAP_PACKET PacketToMap;
char dummy[2048];
int len;
PacketToMap.h.header.type = CMD_BBS;
PacketToMap.h.header.size = msgLen;
strncpy( PacketToMap.u.PublicNotice.msg, msg, msgLen );
len = sizeof( PacketToMap.h ) + msgLen;
dummy[0] = (BYTE)PTCL_BROADCAST_TO_SERVERS;
memcpy( dummy+1, (char*)&PacketToMap, len );
if( !g_pServerTable->Send( pServerData->dwConnectionIndex, (char *)dummy, len+1 ) )
{
MyLog( LOG_IMPORTANT, "Failed To Send For Public Notice" );
}
//
}
}
break;
case MSG_RM_CHANGE_WEATHER:
{
BYTE bWeather = pMsg[2]; //朝揪
int num = pMsg[8]; //辑滚 肮荐
BYTE bStop = pMsg[7];
DWORD dwAmount;
memcpy(&dwAmount, pMsg+3, 4);
int offset = 9;
WORD wPort;
LP_SERVER_DATA pData;
for(int i=0; i<num; i++)
{
memcpy(&wPort, pMsg + offset, 2);
pData = g_pServerTable->GetServerData(wPort);
offset += 2;
if(!pData) continue;
if(pData->dwConnectionIndex == 0) continue;
PACKET_CHANGE_WEATHER packet(bWeather, bStop, dwAmount);
g_pINet->SendToServer(pData->dwConnectionIndex, (char*)&packet, packet.GetPacketSize(), FLAG_SEND_NOT_ENCRYPTION);
}
}
break;
// OtherServer -> Proxy
case MSG_ECHO:
{
PACKET_ECHO *packet = (PACKET_ECHO*)pMsg;
if(g_dwEchoID == packet->dwEchoID)
{
g_EchoBucket[ packet->bBucketIndex ].bReceived = 1;
}
}
break;
/*
MANAGER_TO_MAP_PACKET PacketToMap;
char dummy[612];
int len;
PacketToMap.h.header.type = CMD_BBS;
PacketToMap.h.header.size = pPacket->b.MgrPublicNoticePacket.wLengthOfMsg;
strncpy( PacketToMap.u.PublicNotice.msg, pPacket->b.MgrPublicNoticePacket.szMessage, PacketToMap.h.header.size );
len = sizeof( PacketToMap.h ) + PacketToMap.h.header.size;
dummy[0] = (BYTE)PTCL_BROADCAST_TO_SERVERS;
memcpy( dummy+1, (char*)&PacketToMap, len );
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrPublicNoticePacket.wPort );
if( !g_pServerTable->Send( pServerData->dwConnectionIndex, (char *)dummy, len+1 ) )
{
MyLog( LOG_IMPORTANT, "Failed To Send For Public Notice" );
}
*/
/*
//Tool俊辑 辑滚甸 沥焊 夸备 ~
case MSG_RM_REQUEST_SERVER_STATUS:
{
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrSubServerRequestPacket.wPort );
if( pServerData != NULL )
{
pSendPacket->b.MgrServerStatusPacket.dwStatus = pServerData->dwStatus;
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = pServerData->dwNumOfUsers;
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + (sizeof(DWORD) * 2) ) )
{
MyLog( LOG_NORMAL, "MSG_RM_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
else
{
MyLog( LOG_NORMAL, "MSG_RM_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
*/
//--------------------------------------------------------------------------------------------
// Listener Packet
//--------------------------------------------------------------------------------------------
case MSG_RM_COPY_PATH:
case MSG_RM_LISTENER_PATCH:
case MSG_RM_DOWNLOAD_PATH:
{
g_pRMTable->BroadcastAllListener(pMsg,dwLength);
}
break;
case MSG_LISTENER_LOGIN:
{
// 铝 捞犯霸 秦辑 掘绰 辑滚 捞抚篮 .. 加档啊 呈公 蠢妨.. 辑滚 何窍啊 等促..
// 公侥窍歹扼档.. 肺弊牢 菩哦俊 辑滚 捞抚阑 焊郴磊..
/*
in_addr addr;
addr.S_un = g_pINet->GetServerAddress( dwConnectionIndex )->sin_addr.S_un;
char ip[20]; memset(ip,0,20);
memcpy(ip,inet_ntoa(addr),strlen(inet_ntoa(addr)));
gethostbyaddr( ip,20,AF_INET);
*/
//addr.S_un = g_pINet->GetUserAddress( info->ConnectionIndex )->sin_addr.S_un;
//SetDlgItemText(hdlg,IDC_IPADDRESS,inet_ntoa(addr));
}
break;
case MSG_RM_BROADCAST_AGENT:
{
g_pServerTable->BroadCastAgentServer(pMsg,dwLength);
}
break;
case MSG_RM_BROADCAST_DBDEMON:
{
g_pServerTable->BroadCastDBDemon(pMsg, dwLength);
}
break;
case MSG_RM_BROADCAST_MAP:
{
g_pServerTable->BroadCastMapServer(pMsg, dwLength);
}
break;
case MSG_RM_KICKOFF_USER: // 秦寸 蜡历甫 Agent俊辑 官肺 肋扼滚赴促.
{
ForceLogoffUser( (pMsg+2) );
break;
}
//<! BBD 040110 RM栏肺 傈力立加 辆丰矫累 皋矫瘤
case MSG_RM_KICKOFF_USER_ALL:
{
// 蜡历肺弊牢阑 阜绰 风凭
//<! BBD 040401
//User Accept Control
if(!s_bKickOffState)
{
if ( g_pServerTable->ToggleUserAcceptAllowed() == false )
{
s_bKickOffState = true;
ForceLogoffUserAllStart(); // 蜡历碍硼甫 矫累窍扼绊 甘辑滚俊 皋矫瘤甫 朝赴促
MyLog( LOG_NORMAL, "USER ACCEPT STOPED BY RMTool" );
MyLog( LOG_NORMAL, "KickOff All User Started" );
MyLog( LOG_NORMAL, "Start Blocking Agent -> Map Join" );
}
}
//> BBD 040401
break;
}
//> BBD 040110 RM栏肺 傈力立加 辆丰矫累 皋矫瘤
//<! BBD 040110 RM栏肺 老沥 疙荐甫 磊福绰 皋矫瘤
case MSG_RM_KICKOFF_USER_SEVERAL:
{
if(s_bKickOffState)
ForceLogoffUserSeveral();
break;
}
//> BBD 040110 RM栏肺 老沥 疙荐甫 磊福绰 皋矫瘤
//<! BBD 040110 泅犁狼 Agent俊辑 甘辑滚肺 炼牢捞 啊瓷配废 皋矫瘤甫 谎妨霖促
case MSG_RM_KICKOFF_AGENTCANJOIN:
{
//<! BBD 040401
if(s_bKickOffState)
{
//User Accept Control
if ( g_pServerTable->ToggleUserAcceptAllowed() == true )
{
s_bKickOffState = false;
AllowedAgentJoin();
MyLog( LOG_NORMAL, "USER ACCEPT BY RMTool" );
MyLog( LOG_NORMAL, "KickOff All User End" );
MyLog( LOG_NORMAL, "End Blocking Agent -> Map Join" );
}
}
//> BBD 040401
break;
}
//> BBD 040110 泅犁狼 Agent俊辑 甘辑滚肺 炼牢捞 啊瓷配废 皋矫瘤甫 谎妨霖促
}
}
void ForceLogoffUser( const char* szUserID ) // 030224 kyo
{
PACKET_KICKOFF_USER packet;
if( 0>=strlen( szUserID ) )
{
return;
}
strcpy( packet.szUserID, szUserID);
LP_SERVER_DATA pServerData;
for( pServerData = g_pServerTable->m_pServerListHead; pServerData; pServerData = pServerData->pNextServerData )
{
if( (pServerData->dwServerType == SERVER_TYPE_AGENT) && (pServerData->dwConnectionIndex) )//&& (pServerData->dwStatus == STATUS_ACTIVATED) )
{
g_pINet->SendToServer(pServerData->dwConnectionIndex ,
(char*)&packet, sizeof(packet),FLAG_SEND_NOT_ENCRYPTION);
break;
}
}
}
//<! BBD 040110 傈眉 碍硼矫累阑 傈眉 甘辑滚俊 焊辰促
void ForceLogoffUserAllStart()
{
PACKET_KICKOFF_USER_ALL packet;
LP_SERVER_DATA pServerData;
for( pServerData = g_pServerTable->m_pServerListHead; pServerData; pServerData = pServerData->pNextServerData )
{
if( (pServerData->dwServerType == SERVER_TYPE_MAP) && (pServerData->dwConnectionIndex) )//&& (pServerData->dwStatus == STATUS_ACTIVATED) )
{
g_pINet->SendToServer(pServerData->dwConnectionIndex ,
(char*)&packet, sizeof(packet),FLAG_SEND_NOT_ENCRYPTION);
}
}
}
//> BBD 040110 傈眉 碍硼矫累阑 傈眉 甘辑滚俊 焊辰促
//<! BBD 040110 甘辑滚俊 老沥 疙荐狼 碍硼皋矫瘤甫 焊辰促
void ForceLogoffUserSeveral()
{
PACKET_KICKOFF_USER_SEVERAL packet;
LP_SERVER_DATA pServerData;
for( pServerData = g_pServerTable->m_pServerListHead; pServerData; pServerData = pServerData->pNextServerData )
{
if( (pServerData->dwServerType == SERVER_TYPE_MAP) && (pServerData->dwConnectionIndex) )//&& (pServerData->dwStatus == STATUS_ACTIVATED) )
{
g_pINet->SendToServer(pServerData->dwConnectionIndex ,
(char*)&packet, sizeof(packet),FLAG_SEND_NOT_ENCRYPTION);
}
}
}
//> BBD 040110 甘辑滚俊 老沥 疙荐狼 碍硼皋矫瘤甫 焊辰促
//<! BBD 040110 俊捞傈飘俊辑 甘辑滚肺 炼牢 倾侩
void AllowedAgentJoin()
{
PACKET_KICKOFF_AGENTCANJOIN packet;
LP_SERVER_DATA pServerData;
for( pServerData = g_pServerTable->m_pServerListHead; pServerData; pServerData = pServerData->pNextServerData )
{
if( (pServerData->dwServerType == SERVER_TYPE_MAP) && (pServerData->dwConnectionIndex) )//&& (pServerData->dwStatus == STATUS_ACTIVATED) )
{
g_pINet->SendToServer(pServerData->dwConnectionIndex ,
(char*)&packet, sizeof(packet),FLAG_SEND_NOT_ENCRYPTION);
}
}
}
//> BBD 040110 俊捞傈飘俊辑 甘辑滚肺 炼牢 倾侩
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -