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

📄 zoneplayermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		// 弥檬狼 敲饭捞绢狼 版快		m_MinFD = m_MaxFD = fd;	} 	else 	{		m_MinFD = min(fd , m_MinFD);		m_MaxFD = max(fd , m_MaxFD);	}	// 葛电 fd_set 俊 fd 厚飘甫 on 矫挪促.	// m_XXXFDs[1] 篮 促澜锅俊 贸府秦林搁 等促.	FD_SET(fd , &m_ReadFDs[0]);	FD_SET(fd , &m_WriteFDs[0]);	FD_SET(fd , &m_ExceptFDs[0]);	__END_CATCH}//////////////////////////////////////////////////////////////////////// 漂沥 敲饭捞绢甫 概聪历俊辑 昏力茄促.//////////////////////////////////////////////////////////////////////void ZonePlayerManager::deletePlayer_NOBLOCKED (SOCKET fd) 	throw (OutOfBoundException , NoSuchElementException , Error){	__BEGIN_TRY	// 敲饭捞绢 器牢磐甫 敲饭捞绢 硅凯俊辑 昏力茄促.	PlayerManager::deletePlayer(fd);	Assert(m_pPlayers[fd] == NULL);	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	// fd == m_MinFD && fd == m_MaxFD 牢 版快绰 霉锅掳 if 俊辑 贸府等促.	if (fd == m_MinFD) {		// 菊俊辑何磐 力老 累篮 fd 甫 茫绰促.		// m_MinFD 磊府绰 泅犁 NULL 捞 登绢 乐澜阑 蜡狼窍扼.		int i = m_MinFD;		for (i = m_MinFD ; i <= m_MaxFD ; i ++) {			if (m_pPlayers[i] != NULL) {				m_MinFD = i;					break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		// 捞锭俊绰 m_MinFD == m_MaxFD 牢 版快捞促.		// 捞锭俊绰 笛 促 -1 肺 汲沥秦林磊.		if (i > m_MaxFD)			m_MinFD = m_MaxFD = -1;	} else if (fd == m_MaxFD) {		// 第俊辑何磐 啊厘 奴 fd 甫 茫绰促.		int i = m_MaxFD;		for (i = m_MaxFD ; i >= m_MinFD ; i --) {			if (m_pPlayers[i] != NULL) {				m_MaxFD = i;				break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		if (i < m_MinFD) 		{			filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::deletePlayer_NOBLOCKED()", "MinMaxFD problem");			throw UnknownError("m_MinFD & m_MaxFD problem.");		}	}	// 葛电 fd_set 俊 fd 厚飘甫 off 矫挪促.	// m_XXXFDs[1]档 绊媚具 窍绰 捞蜡绰, 捞饶 贸府俊辑 按眉啊 绝绢脸绰单档	// 贸府罐阑 犬伏捞 乐扁 锭巩捞促.	FD_CLR(fd , &m_ReadFDs[0]);	FD_CLR(fd , &m_ReadFDs[1]);	FD_CLR(fd , &m_WriteFDs[0]);	FD_CLR(fd , &m_WriteFDs[1]);	FD_CLR(fd , &m_ExceptFDs[0]);	FD_CLR(fd , &m_ExceptFDs[1]);	__END_CATCH}//////////////////////////////////////////////////////////////////////// 漂沥 敲饭捞绢甫 概聪历俊辑 昏力茄促.//////////////////////////////////////////////////////////////////////void ZonePlayerManager::deletePlayer (SOCKET fd) 	throw (OutOfBoundException , NoSuchElementException , Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	try	{		// 敲饭捞绢 器牢磐甫 敲饭捞绢 硅凯俊辑 昏力茄促.		PlayerManager::deletePlayer(fd);	}	catch ( OutOfBoundException& o )	{		filelog( "ZPMError.txt", "OOB: %s, Socket: %d", o.toString().c_str(), fd );		throw;	}	catch ( NoSuchElementException& n )	{		filelog( "ZPMError.txt", "NSEE: %s, Socket: %d", n.toString().c_str(), fd );		throw;	}	catch ( Error& e)	{		filelog( "ZPMError.txt", "Error: %s, Socket: %d", e.toString().c_str(), fd );		throw;	}	catch (...)	{		filelog( "ZPMError.txt", "抄 隔扼. Socket: %d", fd );		throw;	}	Assert(m_pPlayers[fd] == NULL);	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	// fd == m_MinFD && fd == m_MaxFD 牢 版快绰 霉锅掳 if 俊辑 贸府等促.	if (fd == m_MinFD) {		// 菊俊辑何磐 力老 累篮 fd 甫 茫绰促.		// m_MinFD 磊府绰 泅犁 NULL 捞 登绢 乐澜阑 蜡狼窍扼.		int i = m_MinFD;		for (i = m_MinFD ; i <= m_MaxFD ; i ++) {			if (m_pPlayers[i] != NULL) {				m_MinFD = i;					break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		// 捞锭俊绰 m_MinFD == m_MaxFD 牢 版快捞促.		// 捞锭俊绰 笛 促 -1 肺 汲沥秦林磊.		if (i > m_MaxFD)			m_MinFD = m_MaxFD = -1;	} else if (fd == m_MaxFD) {		// 第俊辑何磐 啊厘 奴 fd 甫 茫绰促.		int i = m_MaxFD;		for (i = m_MaxFD ; i >= m_MinFD ; i --) {			if (m_pPlayers[i] != NULL) {				m_MaxFD = i;				break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		if (i < m_MinFD) 		{			filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::deletePlayer()", "MinMaxFD problem");			throw UnknownError("m_MinFD & m_MaxFD problem.");		}	}	// 葛电 fd_set 俊 fd 厚飘甫 off 矫挪促.	// m_XXXFDs[1]档 绊媚具 窍绰 捞蜡绰, 捞饶 贸府俊辑 按眉啊 绝绢脸绰单档	// 贸府罐阑 犬伏捞 乐扁 锭巩捞促.	FD_CLR(fd , &m_ReadFDs[0]);	FD_CLR(fd , &m_ReadFDs[1]);	FD_CLR(fd , &m_WriteFDs[0]);	FD_CLR(fd , &m_WriteFDs[1]);	FD_CLR(fd , &m_ExceptFDs[0]);	FD_CLR(fd , &m_ExceptFDs[1]);	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Player* ZonePlayerManager::getPlayer (SOCKET fd)	throw (OutOfBoundException , NoSuchElementException , Error){	__BEGIN_TRY	Player* pPlayer = NULL;	__ENTER_CRITICAL_SECTION(m_Mutex)	pPlayer = PlayerManager::getPlayer(fd);	__LEAVE_CRITICAL_SECTION(m_Mutex)	return pPlayer;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Player* ZonePlayerManager::getPlayerByPhoneNumber(PhoneNumber_t PhoneNumber)	throw(OutOfBoundException, NoSuchElementException , Error){	__BEGIN_TRY	return NULL;	__END_CATCH}//////////////////////////////////////////////////////////////////////// 傈眉 荤侩磊甸狼 技捞宏甫 淬寸窍绰 风凭.// 促弗 静饭靛俊辑 立辟 且 荐 乐栏骨肺 遏阑 吧绢 拎具 窍唱..// 泅犁 静饭靛狼 Event贸府甫 窍搁辑 save甫 且 荐 乐栏骨肺...// 窍困 save俊 Lock阑 吧绢林绊 捞 风凭俊辑绰 窃荐父 龋免窍档废 茄促.// ZonePlayerManager:: save()//////////////////////////////////////////////////////////////////////void ZonePlayerManager::save()	throw(Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	unsigned int i;	for(i = 0; i < nMaxPlayers ; i++) 	{		if (m_pPlayers[i] != NULL) 		{			Assert(m_pPlayers[i] != NULL);	// by sigi			Creature* pCreature = ((GamePlayer*)m_pPlayers[i])->getCreature();			Assert(pCreature != NULL);	// by sigi			pCreature->save();		}	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void ZonePlayerManager::pushPlayer(GamePlayer* pGamePlayer)	throw(Error){	__BEGIN_TRY    __ENTER_CRITICAL_SECTION(m_Mutex)    m_PlayerListQueue.push_back(pGamePlayer);	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}void ZonePlayerManager::pushOutPlayer(GamePlayer* pGamePlayer)	throw(Error){	__BEGIN_TRY    m_PlayerOutListQueue.push_back(pGamePlayer);	__END_CATCH}void ZonePlayerManager::processPlayerListQueue()	throw(Error) {	__BEGIN_TRY	// PlayerQueue狼 Player甫 皋聪廉俊 眠啊茄促.    	while(! m_PlayerListQueue.empty())	{		GamePlayer* pGamePlayer = m_PlayerListQueue.front();		if (pGamePlayer == NULL)		{			filelog("ZoneBug.txt", "%s : %s", "Zone::heartbeat(1)", "pGamePlayer啊 NULL涝聪促.");			continue;		}		addPlayer_NOBLOCKED(pGamePlayer);		m_PlayerListQueue.pop_front();			Creature* pCreature = pGamePlayer->getCreature();		Assert(pCreature != NULL);		// 货肺 甸绢哎 Zone.. by sigi. 2002.5.11		Zone* pZone = pCreature->getZone();		Assert(pZone != NULL);		/*		// getNewZone()篮 IncomingPlayerManager俊辑 贸府窍档废 沁促.		// by sigi. 2002.5.15		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();		}		*/		pZone->addPC(pCreature, pCreature->getX(), pCreature->getY(), DOWN);	}	__END_CATCH}void ZonePlayerManager::heartbeat()	throw(Error) {	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	processPlayerListQueue();	__LEAVE_CRITICAL_SECTION(m_Mutex)	// 唱哎 措扁凯俊 乐绰 荤恩阑 贸府 秦 霖促.	// 扁成 IPM栏肺 Push窍谷 场捞促.	while(!m_PlayerOutListQueue.empty()) 	{		GamePlayer* pGamePlayer = m_PlayerOutListQueue.front();		m_PlayerOutListQueue.pop_front();		Assert(pGamePlayer != NULL);		g_pIncomingPlayerManager->pushPlayer(pGamePlayer);	}	__END_CATCH}void ZonePlayerManager::deleteQueuePlayer(GamePlayer* pGamePlayer)    throw(NoSuchElementException , Error){    __BEGIN_TRY	// 鞘夸绝绰 lock牢芭 鞍促.	// 力芭 by sigi. 2002.5.9	//__ENTER_CRITICAL_SECTION(m_Mutex)	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_Mutex)	__END_CATCH}void    ZonePlayerManager::removeFlag (Effect::EffectClass EC) 	throw(Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	for (uint i = 0; i < nMaxPlayers ; i++) 	{		Player* pPlayer = m_pPlayers[i];		if (pPlayer != NULL) 		{			GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>( pPlayer );			Assert(pGamePlayer!=NULL);			Creature* pCreature = pGamePlayer->getCreature();			Assert(pCreature != NULL);			pCreature->removeFlag( EC );		}    }	__LEAVE_CRITICAL_SECTION(m_Mutex)		__END_CATCH}////////////////////////////////////////////////////////////////////////// ZonePlayerManager 俊 乐绰 葛电 荤侩磊甫 沥府茄促.////////////////////////////////////////////////////////////////////////void ZonePlayerManager::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 ( 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}bool checkZonePlayerManager( GamePlayer* pGamePlayer, ZonePlayerManager* pZPM, const string& str ){	if ( pGamePlayer == NULL )		return true;	Creature* pCreature = pGamePlayer->getCreature();	if ( pCreature == NULL )		return true;	Zone* pZone = pCreature->getZone();	if ( pZone == NULL )		return true;	ZoneGroup* pZoneGroup = pZone->getZoneGroup();	if ( pZoneGroup == NULL )		return true;	ZonePlayerManager* pZonePlayerManager = pZoneGroup->getZonePlayerManager();	if ( pZonePlayerManager == NULL )		return true;	if ( pZPM != pZonePlayerManager )	{		filelog( "ZPMCheck.log", "CZPM:%u GZPM:%u SOCK:%d ZID:%u NAME:%s P:%s",					pZPM->getZGID(), 					pZonePlayerManager->getZGID(),					pGamePlayer->getSocket()->getSOCKET(),					pZone->getZoneID(),					pCreature->getName().c_str(),					str.c_str() );		return false;	}	return true;}// external variable definitionZonePlayerManager* g_pZonePlayerManager = NULL;

⌨️ 快捷键说明

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