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

📄 incomingplayermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			} // if		}	}//	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// process all players' commands//////////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::processCommands() 	throw (IOException , Error){	__BEGIN_TRY	__BEGIN_DEBUG	//__ENTER_CRITICAL_SECTION(m_Mutex)	if (m_MinFD == -1 && m_MaxFD == -1) // no player exist	{ 		//m_Mutex.unlock();		return;	}	//copyPlayers();	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (i != m_SocketID && m_pPlayers[i] != NULL) 		{			GamePlayer* pTempPlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);			Assert(pTempPlayer != NULL);			Assert(m_pPlayers[i] != NULL);			if (pTempPlayer->getSocket()->getSockError()) 			{				FILELOG_INCOMING_CONNECTION( "ICMPCSocketErr.log", "[Command] PlayerID : %s, PlayerStatus : %d", pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );				try 				{					// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.					pTempPlayer->disconnect();				} 				catch (Throwable & t) 				{					cerr << t.toString() << endl;				}				// by sigi. 2002.12.30				UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_COMMAND_ERROR );				// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,				// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.				// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.				// ProcessCommand俊辑 荤扼脸促绰 富捞促.				deletePlayer(i);				deleteQueuePlayer(pTempPlayer);				Creature* pCreature = pTempPlayer->getCreature();				if ( pCreature != NULL )					pCreature->setValue(3);				try				{					SAFE_DELETE(pTempPlayer);				}				catch (Throwable& t)				{					cerr << t.toString() << endl;					filelog( "Destructer.log", "IncommingPlayerManager.cpp +509 : %s" , t.toString().c_str() );				}			} 			else 			{				try 				{					pTempPlayer->processCommand(false);				} 				catch (ProtocolException & pe) 				{					try 					{						FILELOG_INCOMING_CONNECTION( "ICMPCProtocolExcpt.log", "[Command] %s, PlayerID : %s, PlayerStatus : %d", pe.toString().c_str(), pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );						pTempPlayer->disconnect();					} 					catch (Throwable & t) 					{						cerr << t.toString() << endl;					}					// by sigi. 2002.12.30					UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_COMMAND_DISCONNECT );					// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,					// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.					// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.					// ProcessCommand俊辑 荤扼脸促绰 富捞促.					deletePlayer(i);					deleteQueuePlayer(pTempPlayer);					Creature* pCreature = pTempPlayer->getCreature();					if ( pCreature != NULL )						pCreature->setValue(4);					try					{						SAFE_DELETE(pTempPlayer);					}					catch (Throwable& t)					{						cerr << t.toString() << endl;						filelog( "Destructer.log", "IncommingPlayerManager.cpp +509 : %s" , t.toString().c_str() );					}				}			}		}	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// process all players' outputs//////////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::processOutputs () 	throw (IOException , Error){	__BEGIN_TRY	//__ENTER_CRITICAL_SECTION(m_Mutex)	if (m_MinFD == -1 && m_MaxFD == -1) // no player exist	{ 		//m_Mutex.unlock();		return;	}	//copyPlayers();	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (FD_ISSET(i , &m_WriteFDs[1])) 		{			if (i == m_SocketID)			{				FILELOG_INCOMING_CONNECTION( "ICMFD.txt", "[ i == m_SocketID ] FD : %d, ServerSocket : %d, MinFD : %d, MaxFD : %d, nPlayers : %d:", i, m_SocketID, m_MinFD, m_MaxFD, m_nPlayers );				throw IOException("server socket's write bit is selected.");				}			if (m_pPlayers[i] != NULL) 			{				GamePlayer* pTempPlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);				Assert( pTempPlayer != NULL );				Assert(m_pPlayers[i] != NULL);				if (pTempPlayer->getSocket()->getSockError()) 				{					FILELOG_INCOMING_CONNECTION( "ICMPOSocketErr.log", "[Output] PlayerID : %s, PlayerStatus : %d", pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );					try 					{						// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.						pTempPlayer->disconnect(DISCONNECTED);					} 					catch (Throwable & t) 					{						cerr << t.toString() << endl;					}					// by sigi. 2002.12.30					UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_OUTPUT_ERROR );					// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,					// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.					// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.					// ProcessCommand俊辑 荤扼脸促绰 富捞促.					deletePlayer(i);					deleteQueuePlayer(pTempPlayer);					Creature* pCreature = pTempPlayer->getCreature();					if ( pCreature != NULL )						pCreature->setValue(5);					SAFE_DELETE(pTempPlayer);				} 				else 				{					try 					{						pTempPlayer->processOutput();					} 					catch (ConnectException & ce) 					{						FILELOG_INCOMING_CONNECTION( "ICMPOConnectExcept.log", "[Output] %s, PlayerID : %s, PlayerStatus : %d", ce.toString().c_str(), pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );						StringStream msg;						msg << "DISCONNECT " << pTempPlayer->getID() 							<< "(" << ce.toString() << ")";						log(LOG_GAMESERVER_ERROR, "", "", msg.toString());						try 						{							// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.							pTempPlayer->disconnect(DISCONNECTED);						} 						catch (Throwable & t) 						{							cerr << t.toString() << endl;						}						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_OUTPUT_DISCONNECT );						// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,						// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.						// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.						// ProcessCommand俊辑 荤扼脸促绰 富捞促.						deletePlayer(i);						deleteQueuePlayer(pTempPlayer);						Creature* pCreature = pTempPlayer->getCreature();						if ( pCreature != NULL )							pCreature->setValue(6);						SAFE_DELETE(pTempPlayer);					} 					catch (ProtocolException & cp) 					{						FILELOG_INCOMING_CONNECTION( "ICMPOProtocolExcept.log", "[Output] %s, PlayerID : %s, PlayerStatus : %d", cp.toString().c_str(), pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );						StringStream msg;						msg << "DISCONNECT " << pTempPlayer->getID() 							<< "(" << cp.toString() << ")";						log(LOG_GAMESERVER_ERROR, "", "", cp.toString());						// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.						try 						{							pTempPlayer->disconnect(DISCONNECTED);						} 						catch (Throwable & t) 						{							cerr << t.toString() << endl;						}						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_OUTPUT_DISCONNECT2 );						// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,						// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.						// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.						// ProcessCommand俊辑 荤扼脸促绰 富捞促.						deletePlayer(i);						deleteQueuePlayer(pTempPlayer);						Creature* pCreature = pTempPlayer->getCreature();						if ( pCreature != NULL )							pCreature->setValue(7);						SAFE_DELETE(pTempPlayer);					}				}			}			//pTempPlayer->processOutput();		}	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// process all players' exceptions// 泅犁鳖瘤绰 OOB 单捞鸥甫 傈价且 拌裙篮 绝促.// 蝶扼辑, 父距 OOB啊 难廉 乐促搁 俊矾肺 埃林窍绊 立加阑 犬 漏扼 滚赴促.//////////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::processExceptions () 	throw (IOException , Error){	__BEGIN_TRY	//__ENTER_CRITICAL_SECTION(m_Mutex)	if (m_MinFD == -1 && m_MaxFD == -1) // no player exist	{ 		//m_Mutex.unlock();		return;	}	//copyPlayers();	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (FD_ISSET(i , &m_ExceptFDs[1])) 		{			if (i != m_SocketID) 			{				if (m_pPlayers[i] != NULL) 				{					GamePlayer* pTempPlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);					Assert(pTempPlayer != NULL );					Assert(i != m_SocketID);					Assert(m_pPlayers[i] != NULL);					StringStream msg;					msg << "OOB from " << pTempPlayer->toString();										FILELOG_INCOMING_CONNECTION( "ICMPEOOB.log", "PlayerID : %s, PlayerStatus : %d", pTempPlayer->getID().c_str(), (int)pTempPlayer->getPlayerStatus() );					try 					{						pTempPlayer->disconnect();					} 					catch (Throwable & t) 					{						//cerr << t.toString() << endl;					} 					// by sigi. 2002.12.30					UserGateway::getInstance()->passUser( UserGateway::USER_OUT_INCOMING_EXCEPTION );					// 敲饭捞绢啊 绝促绰 富篮? 促弗 镑俊辑 瘤况 脸芭唱,					// 促弗 镑俊辑 deletePlayer甫 窍绰 镑篮 绝促.					// 坷肺瘤 阿 PlayerManager俊辑父 Player甫 瘤匡 荐 乐促.					// ProcessCommand俊辑 荤扼脸促绰 富捞促.					deletePlayer(i);					deleteQueuePlayer(pTempPlayer);					Creature* pCreature = pTempPlayer->getCreature();					if ( pCreature != NULL )						pCreature->setValue(8);					SAFE_DELETE(pTempPlayer);				}			} 			else 			{				//cerr << "Exception in Loginserver to Gameserver" << endl;			}		}	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}	//////////////////////////////////////////////////////////////////////////////// select 扁馆俊辑绰 nonblocking 家南阑 荤侩窍瘤 臼绰促.//////////////////////////////////////////////////////////////////////////////bool IncomingPlayerManager::acceptNewConnection ()	throw (Error){	__BEGIN_TRY	m_CheckValue = 0;		int fd = -9999;	int MinFD = (int)m_MinFD;	int MaxFD = (int)m_MaxFD;	// 喉废欧 规侥栏肺 connection阑 扁促副 版快	// 府畔登绰 蔼篮 例措 NULL捞 瞪 荐 绝促.	// 肚茄 NonBlockingIOException档 惯积且 荐 绝促.	Socket* client = NULL;	try {		m_CheckValue = 1;		client = m_pServerSocket->accept();		m_CheckValue = 2;	} catch ( Throwable & t ) {		m_CheckValue += 10000;	}	if (client == NULL) 	{		m_CheckValue = 50;		return false;	}	try 	{		fd = (int)client->getSOCKET();		FILELOG_INCOMING_CONNECTION("acceptNewConnection.log", "Accept FD : %d ( MinFD : %d , MaxFD : %d ) %s", fd, MinFD, MaxFD, client->getHost().c_str() );		if (fd<=0 || fd>=nMaxPlayers)		{			FILELOG_INCOMING_CONNECTION("acceptNewConnectionError.log", "Accept FD : %d ( MinFD : %d , MaxFD : %d ) %s", fd, MinFD, MaxFD, client->getHost().c_str() );			throw Error();		}		// 俊矾 贸府甫 困窍咯 持绢 滴菌绰单 盔牢阑 怖 灌囚具 茄促..		// 酒付档 Thread狼 家南 包府 何盒俊辑 巩力啊 积扁瘤 臼阑鳖 积阿 茄促		// Thread 包访 贸府甫 场郴扁 傈鳖瘤 烙矫肺 甸绢埃促.		if( client->getSockError() ) 		{			m_CheckValue = 4;			throw Error();		}		m_CheckValue = 5;		client->setNonBlocking();		m_CheckValue = 6;		// 俊矾 贸府甫 困窍咯 持绢 滴菌绰单 盔牢阑 怖 灌囚具 茄促..		// 酒付档 Thread狼 家南 包府 何盒俊辑 巩力啊 积扁瘤 臼阑鳖 积阿 茄促		// Thread 包访 贸府甫 场郴扁 傈鳖瘤 烙矫肺 甸绢埃促.

⌨️ 快捷键说明

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