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

📄 incomingplayermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 4 页
字号:
{	__BEGIN_TRY    __ENTER_CRITICAL_SECTION(m_MutexOut)    m_PlayerOutListQueue.push_back(pGamePlayer);    __LEAVE_CRITICAL_SECTION(m_MutexOut)	__END_CATCH}void IncomingPlayerManager::heartbeat()	throw(Error) {	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	//--------------------------------------------------	// PlayerQueue狼 Player甫 皋聪廉俊 眠啊茄促.    	//--------------------------------------------------	// ZPM俊辑 IPM栏肺 甸绢啊绰 版快绰 Status俊 蝶扼辑 贸府窍绰 规侥捞 崔扼柳促.	// ZPM俊辑 IPM栏肺 啊绰 辆幅俊绰 滴啊瘤啊 乐促.	// 1. 粮捞悼阑 且 版快 GPS_WAITING_FOR_CG_READY 惑怕.	// 2. 肺弊酒眶阑 且 版快 GPS_AFTER_SENDING_GL_INCOMING_CONNECTION	while(! m_PlayerListQueue.empty())	{		GamePlayer* pGamePlayer = m_PlayerListQueue.front();		if (pGamePlayer == NULL)		{			filelog("ZoneBug.txt", "%s : %s", "Zone::heartbeat(1)", "pGamePlayer啊 NULL涝聪促.");			continue;		}		m_PlayerListQueue.pop_front();		//-----------------------------------------------------------------------------		// * elcastle 's Note		//-----------------------------------------------------------------------------		// 逞绢坷绰 苞沥俊辑 KICKED 敲饭弊啊 吧妨 乐促绰 富篮 厚沥惑 辆丰扼绰 富捞促.		// 捞 版快绰 弊成 Disconnect 秦林搁 登绰 巴捞促.		// 肺弊酒眶阑 窍绰 版快绰 捞 窜拌俊辑 KICKED啊 吧妨 乐瘤 臼促.		// LGIncomingConnectionOK 窜拌俊辑 KICKED 敲饭弊啊 吧妨 乐栏骨肺 球哎府瘤 富磊.		// 沥惑利牢 肺弊酒眶狼 版快 捞 眉农俊辑 吧府绰 巴篮 沥惑利捞瘤 给窍促.		// 家南狼 俊矾, 厚沥惑 利牢 辆丰狼 版快 咯扁辑 立加阑 谗绢 滚府霸 等促.		// 咯扁辑 谗绊 立加 窍绊甫 促 窍绰 捞蜡绰 家南狼 Using 磊盔俊 措茄 目澄饭骇狼		// 阂救沥茄 瘤盔捞 乐阑瘤档 葛福绰 版快甫 措厚秦辑 捞促.		// 角力利栏肺档 阂救沥茄 泅惑捞 唱鸥唱绊 乐促.		//-----------------------------------------------------------------------------		if( pGamePlayer->isPenaltyFlag(PENALTY_TYPE_KICKED) ) {			// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.			int fd = -1;			Socket* pSocket = pGamePlayer->getSocket();			if (pSocket!=NULL) fd = (int)pSocket->getSOCKET();			FILELOG_INCOMING_CONNECTION("incomingDisconnect.log", "FD : %d, %s", 					fd, (pSocket==NULL? "NULL" : pSocket->getHost().c_str()) );			// by sigi. 2002.12.30			if (pGamePlayer->getReconnectPacket()!=NULL)			{				UserGateway::getInstance()->passUser( UserGateway::USER_OUT_NORMAL );			}			else			{				UserGateway::getInstance()->passUser( UserGateway::USER_OUT_KICKED );			}			try 			{ 				pGamePlayer->disconnect(DISCONNECTED);				// Login阑 窍扁 困秦辑 扁粮俊 乐带 某腐磐甫 力芭窍绰 版快捞促.				// 捞 锭绰.. LoginServer肺 搬苞 packet阑 焊郴拎具 茄促.				// by sigi. 2002.5.4				if (pGamePlayer->isKickForLogin())				{					// send GLKickVerify to LoginServer. 2002.5.6					GLKickVerify glKickVerify;					glKickVerify.setKicked(true);					glKickVerify.setID( pGamePlayer->getSocket()->getSOCKET() );					glKickVerify.setPCName( pGamePlayer->getCreature()->getName() );					g_pLoginServerManager->sendPacket( pGamePlayer->getKickRequestHost(), 														pGamePlayer->getKickRequestPort(), 														&glKickVerify );					cout << "LGKickVerify Send Packet to ServerIP : " << pGamePlayer->getKickRequestHost() << endl;					cout << "LGKickVerify Send Packet to ServerPort : " << pGamePlayer->getKickRequestPort() << endl;				}			} 			catch (Throwable & t) 			{				cerr << t.toString() << endl;			}			Creature* pCreature = pGamePlayer->getCreature();			if ( pCreature != NULL )				pCreature->setValue(9);			SAFE_DELETE(pGamePlayer);			continue;		}		addPlayer_NOBLOCKED(pGamePlayer);		//filelog("ZoneHeartbeatTrace.txt", "Added Player[%s]", pGamePlayer->getID().c_str());			// 肯寒洒 Adding阑 场辰 促澜 促澜苞 鞍篮 贸府甫 秦霖促. Status俊 蝶扼辑.		// ZPM俊辑 IPM栏肺 肯寒洒 逞绢柯 版快俊 弊俊 蝶弗 菩哦阑 朝赴促.		// 粮捞悼阑 窍绰 版快捞促.		if (pGamePlayer->getPlayerStatus() == GPS_WAITING_FOR_CG_READY) 		{			Creature * pCreature = pGamePlayer->getCreature();			Assert(pCreature != NULL);			Zone* pOldZone = pCreature->getZone();			// by sigi. 2002.5.15			Zone* pZone = pCreature->getNewZone();			//Assert(pZone != NULL);			if (pOldZone!=NULL)			{				// 付胶磐 饭绢俊辑 敲饭捞绢啊 唱啊绰 版快				if (pOldZone->isMasterLair())				{					MasterLairManager* pMasterLairManager = pOldZone->getMasterLairManager();					Assert(pMasterLairManager!=NULL);					pMasterLairManager->leaveCreature( pCreature );				}				// PK 粮俊辑 敲饭捞绢啊 唱啊绰 版快				if (pCreature->isPLAYER() && pZone != NULL && pOldZone->getZoneID() != pZone->getZoneID())				{					if(g_pPKZoneInfoManager->isPKZone( pOldZone->getZoneID() )) g_pPKZoneInfoManager->leavePKZone( pOldZone->getZoneID() );				}			}			if (pZone==NULL)			{				pZone = pCreature->getZone();				Assert(pZone != NULL);			}			else			{				pCreature->setZone( pZone );				pCreature->setNewZone( NULL );				pCreature->setXY( pCreature->getNewX(), pCreature->getNewY() );				// 货 Zone俊 甸绢啊霸 登绰 版快				pCreature->registerObject();			}			// 鞠龋拳 内靛 殿废. 瘤陛篮 objectID肺 窍扁 锭巩俊.. by sigi. 2002.11.27#ifdef __USE_ENCRYPTER__			pGamePlayer->setEncryptCode();#endif			#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)				// 呼傅				// 蜡丰粮 --> 公丰粮栏肺 哎 版快 30饭骇 捞窍狼 辆樊力绰 瘤阂 场捞促.				if ( ( pGamePlayer->isPayPlaying() || pGamePlayer->isPremiumPlay() )					&& pGamePlayer->getPayType() == PAY_TYPE_TIME )				{					Assert( pCreature->isPC() );					PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);					Assert( pPC != NULL );					if ( pPC->canPlayFree() && !pZone->isPayPlay() && !pZone->isPremiumZone() )					{						//cout << "LogoutPayPlay:[" << (int)pZone->getZoneID() << "] " 						//		<< (int)pZone->isPayPlay() << " , "						//		<< (int)pZone->isPremiumZone() << endl;						pGamePlayer->logoutPayPlay( pGamePlayer->getID() );					}				}			#endif			// System Availabilities 沥焊甫 焊郴霖促.			SEND_SYSTEM_AVAILABILITIES(pGamePlayer);			//--------------------------------------------------------------------------------			// GCUpdateInfo 菩哦阑 父甸绢 朝赴促.			//--------------------------------------------------------------------------------			GCUpdateInfo gcUpdateInfo;						makeGCUpdateInfo(&gcUpdateInfo, pCreature);						pGamePlayer->sendPacket(&gcUpdateInfo);		// 肺弊酒眶阑 窍绰 版快捞促.		} else if (pGamePlayer->getPlayerStatus() == GPS_AFTER_SENDING_GL_INCOMING_CONNECTION) {//			cout << "Logout..." << pGamePlayer->getID() << endl;/*			Creature * pCreature = pGamePlayer->getCreature();			// PK 粮俊辑 敲饭捞绢啊 唱啊绰 版快			if ( pCreature != NULL && g_pPKZoneInfoManager->isPKZone( pCreature->getZoneID() ))			{				g_pPKZoneInfoManager->leavePKZone( pCreature->getZoneID() );			}*/   			// 肺弊牢 辑滚肺 GLIncomingConnection阑 焊辰促.			// PlayerName苞 ClientIP甫 鞍捞 角绢辑 焊辰促.			GLIncomingConnection glIncomingConnection;			glIncomingConnection.setPlayerID(pGamePlayer->getID());			glIncomingConnection.setClientIP(pGamePlayer->getSocket()->getHost());			static int portNum = g_pConfig->getPropertyInt("LoginServerUDPPortNum");			int port;						if (portNum > 1)			{				port = g_pConfig->getPropertyInt("LoginServerBaseUDPPort") 						+ rand()%portNum;			}			else			{				port = g_pConfig->getPropertyInt("LoginServerUDPPort");			}				//cout << "ReconnectAddress = " << g_pConfig->getProperty("LoginServerIP").c_str() << ":" << port << endl;			/*			if (g_pConfig->getProperty("User") == "excel96")				g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection);			else if (g_pConfig->getProperty("User") == "elcastle")				g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection);			else if (g_pConfig->getProperty("User") == "elca")				g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection);			*/			// 弊成 焊辰促. by sigi. 2002.11.26			g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection);		}			//filelog("ZoneHeartbeatTrace.txt", "After pop front");	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	// 唱哎 措扁凯俊 乐绰 荤恩阑 贸府 秦 霖促.	// ZPM栏肺 啊绰 荤恩甸阑 贸府窍绰 何盒捞促. 扁成 眠啊 窍搁 瞪 巴捞促.	// 绢蠢 粮栏肺 啊绰瘤 舅酒扁 困秦急 Creatue狼 Zone阑 曼炼窍骨肺 固府 Zone阑 茫酒辑 悸泼秦 滴绢具 且 巴.	// by sigi. 2002.12.10    __ENTER_CRITICAL_SECTION(m_MutexOut)	while(!m_PlayerOutListQueue.empty()) {		GamePlayer* pGamePlayer = m_PlayerOutListQueue.front();		m_PlayerOutListQueue.pop_front();		Assert(pGamePlayer != NULL);		Creature * pCreature = pGamePlayer->getCreature();		Assert(pCreature != NULL);		// getNewZone()捞 货肺 甸绢哎 Zone捞促.	 by sigi. 2002.5.11		//Zone * pZone = pCreature->getZone();		//Assert(pZone != NULL);		Zone * pZone = pCreature->getNewZone();		//Assert(pZone != NULL);		// newZone捞 汲沥 救灯栏搁 扁粮 粮栏肺.. -_-;		// load()且锭绰 NewZone汲沥阑 救茄促.		if (pZone==NULL)		{			pZone = pCreature->getZone();			Assert(pZone != NULL);		}		// 甸绢哎 粮狼 PlayerManager甫 茫绰促.		ZoneGroup * pZoneGroup = pZone->getZoneGroup();		Assert(pZoneGroup != NULL);		ZonePlayerManager * pZonePlayerManager = pZoneGroup->getZonePlayerManager();		Assert(pZonePlayerManager != NULL);		// Push 茄促.		pZonePlayerManager->pushPlayer(pGamePlayer);	}    __LEAVE_CRITICAL_SECTION(m_MutexOut)	__END_CATCH}void IncomingPlayerManager::deleteQueuePlayer(GamePlayer* pGamePlayer)    throw(NoSuchElementException , Error){	__BEGIN_TRY	// 鞘夸绝绰 lock牢芭 鞍促.	// by sigi. 2002.5.9	// 促弗 lock荤侩. 2002.12.10	__ENTER_CRITICAL_SECTION(m_MutexOut)	Assert(pGamePlayer != NULL);	list<GamePlayer *>::iterator itr = find_if (m_PlayerOutListQueue.begin(), m_PlayerOutListQueue.end(), isSamePlayer(pGamePlayer));	if (itr != m_PlayerOutListQueue.end()) {		m_PlayerOutListQueue.erase(itr);	}	__LEAVE_CRITICAL_SECTION(m_MutexOut)	__END_CATCH}////////////////////////////////////////////////////////////////////////// IncomingPlayerManager 俊 乐绰 葛电 荤侩磊甫 沥府茄促.////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::clearPlayers()	throw (Error){	__BEGIN_TRY	// PlayerListQueue 俊 乐绰 局甸阑 沥府茄促.	while ( !m_PlayerListQueue.empty() )	{		GamePlayer* pGamePlayer = m_PlayerListQueue.front();		m_PlayerListQueue.pop_front();		if ( pGamePlayer != NULL )		{			try			{				pGamePlayer->disconnect();			}			catch ( Throwable& t )			{				// 公矫			}			SAFE_DELETE( pGamePlayer );		}	}	// PlayerOutListQueue 俊 乐绰 局甸阑 沥府茄促.	while ( !m_PlayerOutListQueue.empty() )	{		GamePlayer* pGamePlayer = m_PlayerOutListQueue.front();		m_PlayerOutListQueue.pop_front();		if ( pGamePlayer != NULL )		{			try			{				pGamePlayer->disconnect();			}			catch ( Throwable& t )			{				// 公矫			}			SAFE_DELETE( pGamePlayer );		}	}	if ( m_MinFD == -1 && m_MaxFD == -1 )		return;	// 敲饭捞绢甫 沥府茄促.	for ( int i = m_MinFD; i <= m_MaxFD; i++ )	{		if ( i != m_SocketID && m_pPlayers[i] != NULL )		{			GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);			if ( pGamePlayer != NULL )			{				try				{					pGamePlayer->disconnect();				}				catch ( Throwable& t )				{					// 公矫				}				SAFE_DELETE( pGamePlayer );			}		}	}	__END_CATCH}// external variable definitionIncomingPlayerManager* g_pIncomingPlayerManager = NULL;

⌨️ 快捷键说明

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