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

📄 servertable.cpp

📁 Agent in c++ for DragonRaja
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		break;
	// ---------------------
	// 立加 疙飞 菩哦 
	// ---------------------
	case PTCL_ORDER_CONNECT_TO_SERVERS:
		{
			LP_AWAITING_CONNECTION_RESULT_DATA pResult = this->GetConnectionResultData();
			LP_SERVER_PORT_LIST_PACKET pToConnectList = (LP_SERVER_PORT_LIST_PACKET)pMsg;
			LP_SERVER_PORT_LIST_PACKET pConnectedList = (LP_SERVER_PORT_LIST_PACKET)(pResult->szAnswer+1);
			LP_SERVER_DATA pTargetServer;

			// Added by chan78 at 2001/03/16 :: this->m_ConnectionResultData 啊 荤侩吝老订 公矫.
			// 捞繁 惑炔篮 缴阿窍促. 惯积秦急 救凳.
			if( this->GetConnectionResultData()->dwConnectionType != CONNECT_TYPE_NONE )
			{
				MyLog( LOG_FATAL, "PTCL_ORDER_SET_SERVER_LIST :: this->m_ConnectionResultData is Already Using!!!(%d)", this->GetConnectionResultData()->dwConnectionType );
#ifdef __ON_DEBUG
				_asm int 3;
#else
				this->DestroyServer( FINISH_TYPE_UNKNOWN_ERROR );
#endif
			}

			pResult->dwConnectionType = CONNECT_TYPE_BY_PROXY_ORDER;
			pResult->dwToConnectServers = 0;
			pResult->dwResultCheckedServers = 0;
			pResult->pSender = pSender;

			pConnectedList->wNum = 0;

			for( i = 0; i < pToConnectList->wNum; i++ )
			{
				pTargetServer = GetServerData( pToConnectList->wPort[i] );

				if( pTargetServer && pTargetServer->dwConnectionIndex )
				{
					// 捞固 立加登绢 乐绰 版快.

					pConnectedList->wPort[pConnectedList->wNum++] = pTargetServer->wPort;
				}
				else 
				{
					if( pTargetServer && this->ConnectToServer( pTargetServer, CONNECT_TYPE_BY_PROXY_ORDER ) )
					{
						// 矫档绰 己傍...
						// 搬苞 贸府绰 妮归窃荐俊辑.
						pResult->dwToConnectServers++;
					}
					else
					{
						if( !pTargetServer )
						{
							MyLog( LOG_FATAL, "PTCL_ORDER_CONNECT_TO_SERVERS :: pTargetServer is NULL!!!(port:%d)", pTargetServer->wPort );
						}
						else
						{
							MyLog( LOG_FATAL, "INETWORK::ConnectToServer() returned NULL!!!(port:%d)", pTargetServer->wPort );
							this->DestroyServer( FINISH_TYPE_UNKNOWN_ERROR );
						}
					}
				}
			}

			// 立加 搬苞甫 扁促副 辑滚啊 绝绰 版快.
			if( pResult->dwToConnectServers == 0 )
			{
				this->ReportOrderedConnectionResult();
			}
		}
		break;
	// ------------------
	// DB Demon 硅沥 菩哦
	// ------------------
	case PTCL_ORDER_SET_DB_DEMON:
		{
			WORD wDBDemonPort = *(WORD*)pMsg;
			LP_SET_DB_DEMON_RESULT_PACKET pPacket = (LP_SET_DB_DEMON_RESULT_PACKET)(szDummyMsg+1);

			szDummyMsg[0] = PTCL_DB_DEMON_SETTING_RESULT;

			LP_SERVER_DATA pDBDemon;

			if( pDBDemon = GetServerData( wDBDemonPort ) )
			{
				if( pDBDemon->dwConnectionIndex )
				{
					// 技泼
					this->m_pOwnDBDemonData = pDBDemon;

					// 己傍 舅覆.
					pPacket->dwResult = RESULT_DB_DEMON_SETTING_SUCCESSED;
					this->SetServerStatus( STATUS_ACTIVATED );
				}
				else
				{
					pPacket->dwResult = RESULT_DB_DEMON_IS_NOT_CONNECTED;
					// 犁夸没.
					this->RequestToSetDBDemon();
				}
			}
			else
			{
				pPacket->dwResult = RESULT_DB_DEMON_IS_NOT_IN_LIST;
			}

			szDummyMsg[0] = (BYTE)PTCL_DB_DEMON_SETTING_RESULT;
			if( !this->Send( pSender->dwConnectionIndex, szDummyMsg, (sizeof(BYTE)+sizeof(SET_DB_DEMON_RESULT_PACKET))) )
			{
#ifdef __ON_DEBUG
//				_asm int 3;
#endif
				this->SetServerStatus( STATUS_AWAITING_DB_DEMON_SETTING );
			}
		}
		break;
	// ---------------
	// 辑滚府胶飘 焊绊
	// ---------------
	case PTCL_ORDER_TO_REPORT_SERVER_DATAS:
		{
			LP_SERVER_CINFO_LIST_PACKET pPacket = (LP_SERVER_CINFO_LIST_PACKET)(szDummyMsg+1);
			LP_SERVER_CINFO pCInfo = NULL;
			LP_SERVER_DATA pDummyServerData = NULL;

			pPacket->dwServerSetNumber = this->m_dwServerSetNumber;
			pPacket->wNum = 0;

			for( pDummyServerData = this->GetServerListHead(); pDummyServerData; pDummyServerData = pDummyServerData->pNextServerData )
			{
				// Own Proxy绰 力寇.
				if( pDummyServerData == pSender )
					continue;

				memcpy( pPacket->pServerData[pPacket->wNum].szIP, pDummyServerData->szIP, MM_IP_LENGTH );
				pPacket->pServerData[pPacket->wNum].wPort = pDummyServerData->wPort;
				pPacket->pServerData[pPacket->wNum].bConnected = (pDummyServerData->dwConnectionIndex?true:false);

				pPacket->wNum++;
			}

			szDummyMsg[0] = (BYTE)PTCL_REPORT_SERVER_DATAS;

			// Send it
			if( !this->Send( pSender->dwConnectionIndex, szDummyMsg, sizeof(BYTE)+sizeof(WORD)+(sizeof(SERVER_CINFO)*pPacket->wNum) ) )
			{
#ifdef __ON_DEBUG
//				_asm int 3;
#endif
			}
		}
		break;
	// ------------------
	// 牢刘犬牢 菩哦 贸府
	// ------------------
	case PTCL_NOTIFY_YOU_ARE_CERTIFIED:
		{
			// Proxy Is Activated
			this->SetServerStatus( pSender, STATUS_ACTIVATED );

			// 立加且 辑滚狼 格废阑 夸备茄促.
			szDummyMsg[0] = (BYTE)PTCL_REQUEST_TO_CONNECT_SERVER_LIST;

			if( !this->Send( pSender->dwConnectionIndex, szDummyMsg, (sizeof(BYTE))) )
			{
#ifdef __ON_DEBUG
//				_asm int 3;
#endif
			}
		}
		break;
#endif
// ----------------------------------------------------------------------------
// PROXY 傈侩 Packet甸
// ----------------------------------------------------------------------------
#ifdef __IS_PROXY_SERVER
	// -----------------------------------
	// SERVER LIST 硅沥 菩哦 夸没阑 贸府窃
	// -----------------------------------
	case PTCL_REQUEST_SET_SERVER_LIST:
		{
			LP_SERVER_CINFO_LIST_PACKET pPacket = (LP_SERVER_CINFO_LIST_PACKET)(szDummyMsg + 1);
			LP_SERVER_DATA pDummyServer;

			pPacket->dwServerSetNumber = this->m_dwServerSetNumber;
			pPacket->wNum = 0;
			for( pDummyServer = this->GetServerListHead(); pDummyServer; pDummyServer = pDummyServer->pNextServerData )
			{
				// 傈价磊狼 沥焊绰 硅沥窍瘤 臼绰促.
				if( pDummyServer->wPort == pSender->wPort )
					continue;

				memcpy( pPacket->pServerData[pPacket->wNum].szIP, pDummyServer->szIP, MM_IP_LENGTH );
				pPacket->pServerData[pPacket->wNum].wPort = pDummyServer->wPort;
				pPacket->wNum++;

				this->SetServerConnectionStatus( pSender, pDummyServer, (BYTE)CONNECTION_STATUS_NOT_CONNECTED );
			}

			szDummyMsg[0] = (BYTE)PTCL_ORDER_SET_SERVER_LIST;

			// Send it
			if( !this->Send( pSender->dwConnectionIndex, szDummyMsg, sizeof(BYTE)+sizeof(WORD)+(sizeof(SERVER_CINFO_LIST_PACKET)*pPacket->wNum) ) )
			{
#ifdef __ON_DEBUG
//				_asm int 3;
#endif
				return true;
			}
			// Change Sender Status
			this->SetServerStatus( pSender, STATUS_AWAITING_SET_SERVER_LIST_RESULT );
		}
		break;
	// ------------------------------------------
	// 立加且 辑滚狼 格废 硅沥 菩哦 夸没阑 贸府窃
	// ------------------------------------------
	case PTCL_REQUEST_TO_CONNECT_SERVER_LIST:
		{
			LP_SERVER_PORT_LIST_PACKET pPacket = (LP_SERVER_PORT_LIST_PACKET)(szDummyMsg + 1);
			LP_SERVER_DATA pDummyServer;

			pPacket->wNum = 0;
			for( pDummyServer = this->GetServerListHead(); pDummyServer; pDummyServer = pDummyServer->pNextServerData )
			{
				// 傈价磊狼 沥焊绰 硅沥窍瘤 臼绰促.
				if( pDummyServer->wPort == pSender->wPort )
					continue;

				if( pDummyServer->dwConnectionIndex )
					if( (pDummyServer->dwStatus > STATUS_AWAITING_SERVER_LIST) && (pDummyServer->dwStatus < STATUS_CLOSING ) )
					{
						pPacket->wPort[pPacket->wNum++] = pDummyServer->wPort;
						this->SetServerConnectionStatus( pSender, pDummyServer, (BYTE)CONNECTION_STATUS_TRYING_TO_CONNECT );
					}
			}
			MyLog( LOG_DEBUG, "%s(%d) 俊霸 %d俺狼 辑滚俊 立加窍档废 硅沥窃", GetTypedServerText(pSender->dwServerType), pSender->wPort, pPacket->wNum );

			// 焊辰促
			szDummyMsg[0] = (BYTE)PTCL_ORDER_CONNECT_TO_SERVERS;
			if( !this->Send( pSender->dwConnectionIndex, szDummyMsg, sizeof(BYTE)+sizeof(WORD)+(sizeof(WORD)*pPacket->wNum) ) )
			{
				// 角菩.
#ifdef __ON_DEBUG
//				_asm int 3;

#endif
				MyLog( LOG_IGNORE, "Failed To Send PTCL_ORDER_CONNECT_SERVERS For %s(%d)", GetTypedServerText( pSender->dwServerType ), pSender->wPort );
				return true;
			}
			// Change Sender Status
			this->SetServerStatus( pSender, STATUS_AWAITING_CONNECTION_RESULT );
		}
		break;
	// -----------------------------------
	// 立加搬苞 菩哦阑 罐酒 贸府.
	// -----------------------------------
	case PTCL_SERVER_CONNECTING_RESULT:
		{
			LP_SERVER_PORT_LIST_PACKET pToConnectList = (LP_SERVER_PORT_LIST_PACKET)pMsg;
			LP_SERVER_DATA pTargetServer;

			for( DWORD i = 0; i< pToConnectList->wNum; i++ )
			{
				pTargetServer = this->GetServerData( pToConnectList->wPort[i] );

				if( !pTargetServer )
				{
#ifdef __ON_DEBUG
//					_asm int 3;
#endif
					continue;
				}
				this->SetServerConnectionStatus( pSender, pTargetServer, (BYTE)CONNECTION_STATUS_CONNECTED );
			}

			// Change Sender Status
			if( pSender->dwServerType == SERVER_TYPE_AGENT || pSender->dwServerType == SERVER_TYPE_MAP )
			{
				this->SetServerStatus( pSender, STATUS_AWAITING_DB_DEMON_SETTING );
			}
			else
			{
				this->SetServerStatus( pSender, STATUS_ACTIVATED );

				if( pSender->dwServerType == SERVER_TYPE_DB )
				{
					LP_SERVER_DATA pDummyServer;
					for( pDummyServer = this->GetServerListHead(); pDummyServer; pDummyServer = pDummyServer->pNextServerData )
					{
						if( pDummyServer->dwConnectionIndex && (pDummyServer->dwStatus == STATUS_AWAITING_DB_DEMON_SETTING) )
						{
							if( this->SetDBDemon( pDummyServer, pSender ) == false )
							{
								MyLog( LOG_IMPORTANT, "Failed To Set DB Demon To %s Server(%d)", GetTypedServerText( pDummyServer->dwServerType ), pDummyServer->wPort );
							}
							else
							{
								this->SetServerStatus( pDummyServer, STATUS_AWAITING_SET_DB_DEMON_RESULT );
							}
						}
					}
				}
			}
		}
		break;
	// -----------------------------------
	// DB DEMON 硅沥 菩哦 夸没阑 贸府窃
	// -----------------------------------
	case PTCL_REQUEST_SET_DB_DEMON:
		{
			if( this->SetDBDemon( pSender ) == false )
			{
				MyLog( LOG_IMPORTANT, "Failed To Set DB Demon To %s Server(%d)", GetTypedServerText( pSender->dwServerType ), pSender->wPort );
				this->SetServerStatus( pSender, STATUS_AWAITING_DB_DEMON_SETTING );
			}
			else
			{
				this->SetServerStatus( pSender, STATUS_AWAITING_SET_DB_DEMON_RESULT );
			}
		}
		break;
	// -----------------------------------
	// DB DEMON 硅沥 搬苞 菩哦阑 贸府窃
	// -----------------------------------
	case PTCL_DB_DEMON_SETTING_RESULT:
		{
			LP_SET_DB_DEMON_RESULT_PACKET pResultPacket = (LP_SET_DB_DEMON_RESULT_PACKET)pMsg;
			
			switch( pResultPacket->dwResult )
			{
			case RESULT_DB_DEMON_SETTING_SUCCESSED:
				{
					this->SetServerStatus( pSender, STATUS_ACTIVATED );
					return true;
				}
				break;
			case RESULT_DB_DEMON_IS_NOT_ACTIVATED:
				{
					MyLog( LOG_IMPORTANT, "PTCL_DB_DEMON_SETTING_RESULT(RESULT_DB_DEMON_IS_NOT_ACTIVATED) from %s(%d)", GetTypedServerText(pSender->dwServerType), pSender->wPort );
				}
				break;
			case RESULT_DB_DEMON_IS_NOT_CONNECTED:
				{
					MyLog( LOG_IMPORTANT, "PTCL_DB_DEMON_SETTING_RESULT(RESULT_DB_DEMON_IS_NOT_CONNECTED) from %s(%d)", GetTypedServerText(pSender->dwServerType), pSender->wPort );
				}
				break;
			case RESULT_DB_DEMON_IS_NOT_IN_LIST:
				{
					MyLog( LOG_IMPORTANT, "PTCL_DB_DEMON_SETTING_RESULT(RESULT_DB_DEMON_IS_NOT_IN_LIST) from %s(%d)", GetTypedServerText(pSender->dwServerType), pSender->wPort );
				}
				break;
			default:
				{
					MyLog( LOG_IMPORTANT, "PTCL_DB_DEMON_SETTING_RESULT:: from %s(%d) has Wrong dwResult(%d)!!!", GetTypedServerText(pSender->dwServerType), pSender->wPort, pResultPacket->dwResult );
				}
				break;
			}
			this->SetServerStatus( pSender, STATUS_AWAITING_DB_DEMON_SETTING );
			return true;
		}
		break;
	// -------------------------------
	// PROXY SERVER 狼 沥焊荐笼
	// -------------------------------
	case PTCL_REPORT_SERVER_DATAS:
		{
			LP_SERVER_CINFO_LIST_PACKET pPacket = (LP_SERVER_CINFO_LIST_PACKET)pMsg;
			LP_SERVER_DATA pDummyServerData = NULL;

			if( pPacket->dwServerSetNumber != this->m_dwServerSetNumber )
			{
				// Server Set Number啊 嘎瘤 臼栏搁 牢沥窍瘤 臼绰促.
				goto ServerDatasAreDiffrent;
			}

			if( pPacket->wNum != (this->m_dwNumOfServers-2) )	// 磊扁磊脚, pSender力寇.
			{
				// 荐啊 救嘎栏搁 歹 杭巴档 绝促.
				goto ServerDatasAreDiffrent;
			}

			for( i = 0; i < pPacket->wNum; i++ )
			{
				// 泅犁 PROXY 牢 版快 Continue;
				if( pPacket->pServerData[i].wPort == this->GetOwnServerData()->wPort )
					continue;

				pDummyServerData = this->GetServerData( pPacket->pServerData[i].wPort );

				if( !pDummyServerData )
					break;

				if( strcmp(pDummyServerData->szIP, pPacket->pServerData[i].szIP) )
					break;

				if( pPacket->pServerData[i].bConnected )
				{
					this->SetServerConnectionStatus( pSender, pDummyServerData, (BYTE)CONNECTION_STATUS_CONNECTED_BETWEEN );
				}
				else
				{
					this->SetServerConnectionStatus( pSender, pDummyServerData, (BYTE)CONNECTION_STATUS_NOT_CONNECTED );
				}
			}

			if( i != (pPacket->wNum-1) )
			{
				// Not Vertified.

ServerDatasAreDiffrent:
				// 老摹窍瘤 臼栏搁 弊 辑滚甫 碍力肺 辆丰矫挪促.
				this->DestroyOtherServer(pSender);

				return true;
			}
			this->SetServerStatus( pSender, STATUS_SERVER_LIST_CERTIFIED );

			// 泅犁 栋乐绰 葛电 辑滚狼 单捞磐 八刘捞 场车绰瘤 犬牢 饶 PROXY甫 悼累矫挪促.
			DWORD dwNumOfCertifiedServer = 0;
			for( pDummyServerData = this->GetServerListHead(); pDummyServerData; pDummyServerData = pDummyServerData->pNextServerData )
			{
				if( pDummyServerData->dwConnectionIndex )
				{
					if( pDummyServerData->dwStatus == STATUS_SERVER_LIST_CERTIFIED )
						dwNumOfCertifiedServer++;
				}
			}

			// 葛电 辑滚啊 牢刘登菌促.
			if( dwNumOfCertifiedServer == this->m_dwNumOfConnectedServers )

⌨️ 快捷键说明

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