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

📄 rmproc.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -