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

📄 incomingplayermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		if( client->getSockError() ) 		{			m_CheckValue = 7;			throw Error();		}		// set socket option (!NonBlocking, NoLinger)		m_CheckValue = 8;		client->setLinger(0);		m_CheckValue = 9;		StringStream msg;		msg << "NEW CONNECTION FROM " << client->getHost() << ":" << client->getPort();		log(LOG_GAMESERVER, "", "", msg.toString());		m_CheckValue = 10;				//----------------------------------------------------------------------		// Incoming List 俊 乐绰瘤 牢刘茄促.		//----------------------------------------------------------------------		// toString()俊辑 CI == NULL 捞 惯积窍扁档 茄促. -_-; 林狼 夸噶..		// 捞 救俊辑 抗寇啊 惯积窍搁 楼弗促.		g_pConnectionInfoManager->getConnectionInfo(client->getHost());		m_CheckValue = 11;		// 努扼捞攫飘 家南阑 颇扼固磐肺 荤侩秦辑 敲饭捞绢 按眉甫 积己茄促.		GamePlayer* pGamePlayer = new GamePlayer(client);		m_CheckValue = 12;		// set player status to GPS_BEGIN_SESSION		pGamePlayer->setPlayerStatus(GPS_BEGIN_SESSION);		m_CheckValue = 13;				// IPM 俊 殿废茄促.		//addPlayer_NOBLOCKED(pGamePlayer);		try 		{			m_CheckValue = 14;			addPlayer(pGamePlayer);			m_CheckValue = 15;			// by sigi. 2002.12.30			UserGateway::getInstance()->passUser( UserGateway::USER_IN_NORMAL );		}		catch ( DuplicatedException & de) 		{			FILELOG_INCOMING_CONNECTION( "ancDupExcept.log", "[Output] %s, FD : %d ( MinFD : %d , MaxFD : %d ) %s", de.toString().c_str(), fd, MinFD, MaxFD, client->getHost().c_str() );			m_CheckValue += 1000;			client->close();			m_CheckValue += 1000;			SAFE_DELETE(client);			m_CheckValue += 1000;			SAFE_DELETE(pGamePlayer);			m_CheckValue += 1000;			//return true;		}	} 	catch (NoSuchElementException&) 	{		FILELOG_INCOMING_CONNECTION( "ancNoSuch.log", "FD : %d ( MinFD : %d , MaxFD : %d ) %s", fd, MinFD, MaxFD, client->getHost().c_str() );		m_CheckValue += 20000;		m_CheckValue += 1000;		StringStream msg2;		msg2 << "ILLEGAL ACCESS FROM " << client->getHost() << ":" <<  client->getPort();		log(LOG_GAMESERVER, "", "", msg2.toString());		m_CheckValue += 1000;		//----------------------------------------acceptNewConnection core!!!		// 牢刘登瘤 给茄 楷搬捞骨肺 楼弗促. -_-;		//client->send("Error : Unauthorized access",27);		m_CheckValue += 1000;		client->close();		m_CheckValue += 1000;		SAFE_DELETE(client);		m_CheckValue += 1000;	}	catch (Throwable & t)	{		FILELOG_INCOMING_CONNECTION( "ancThrowable.log", "FD : %d ( MinFD : %d , MaxFD : %d ) %s checkValue : %d", fd, MinFD, MaxFD, client->getHost().c_str(), m_CheckValue );		m_CheckValue += 30000;		try		{			m_CheckValue = 25;			if( client != NULL ) 			{				client->close();				m_CheckValue = 26;				SAFE_DELETE(client);				m_CheckValue = 27;			}			m_CheckValue = 28;		}		catch (Throwable & t)		{			m_CheckValue += 1000;		}		catch (...)		{			m_CheckValue += 2000;		}	}	catch (exception& e)	{		m_CheckValue += 40000;		FILELOG_INCOMING_CONNECTION( "ancException.log", "FD : %d ( MinFD : %d , MaxFD : %d ) %s checkValue : %d", fd, MinFD, MaxFD, client->getHost().c_str(), m_CheckValue );	}	catch (...)	{		m_CheckValue += 50000;		FILELOG_INCOMING_CONNECTION( "ancEtc.log", "FD : %d ( MinFD : %d , MaxFD : %d ) %s checkValue : %d", fd, MinFD, MaxFD, client->getHost().c_str(), m_CheckValue );	}	m_CheckValue = 33;	return true;	__END_CATCH}////////////////////////////////////////////////////////////////////////// 货肺款 楷搬俊 包访等 敲饭捞绢 按眉甫 IPM俊 眠啊茄促.////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::addPlayer (Player* pGamePlayer) 	throw (DuplicatedException , Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// call base class's method	PlayerManager::addPlayer(pGamePlayer);	SOCKET fd = pGamePlayer->getSocket()->getSOCKET();	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	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]);	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}////////////////////////////////////////////////////////////////////////// 货肺款 楷搬俊 包访等 敲饭捞绢 按眉甫 IPM俊 眠啊茄促.////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::addPlayer_NOBLOCKED (Player* pGamePlayer) 	throw (DuplicatedException , Error){	__BEGIN_TRY	// call base class's method	PlayerManager::addPlayer(pGamePlayer);	SOCKET fd = pGamePlayer->getSocket()->getSOCKET();	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	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 IncomingPlayerManager::deletePlayer_NOBLOCKED (SOCKET fd) 	throw (OutOfBoundException , NoSuchElementException , Error){	__BEGIN_TRY	// call base class's method	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 || i == m_SocketID) {				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 甫 茫绰促.		// SocketID 俊 蜡狼且 巴! (SocketID 狼 版快 Player 器牢磐绰 NULL 捞促.)		int i = m_MaxFD;		for (i = m_MaxFD ; i >= m_MinFD ; i --) {			if (m_pPlayers[i] != NULL || i == m_SocketID) {				m_MaxFD = i;				break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		if (i < m_MinFD) {			FILELOG_INCOMING_CONNECTION( "ICMFD.txt", "[ i < m_MinFD nbl] nPlayers : %d, MinFD : %d, MaxFD : %d, ServerSocket : %d", m_nPlayers, (int)m_MinFD, (int)m_MaxFD, (int)m_SocketID );			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}////////////////////////////////////////////////////////////////////////// 漂沥 敲饭捞绢甫 IPM 俊辑 昏力茄促.//// 敲饭捞绢啊 IPM俊辑 昏力登绰 捞蜡绰 促澜苞 鞍促.////  (1) ZPM栏肺 按眉甫 颗辫 --> 敲饭捞绢 按眉甫 昏力窍搁 救等促.//  (2) 霸烙俊 甸绢啊扁 傈俊 楷搬捞 谗变促. --> 敲饭捞绢 按眉甫 昏力秦具 茄促.//// 蝶扼辑, 敲饭捞绢 昏力绰 寇何俊辑 捞风绢廉具 茄促.////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::deletePlayer (SOCKET fd) 	throw (OutOfBoundException , NoSuchElementException , Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	// call base class's method	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 || i == m_SocketID) 			{				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 甫 茫绰促.		// SocketID 俊 蜡狼且 巴! (SocketID 狼 版快 Player 器牢磐绰 NULL 捞促.)		int i = m_MaxFD;		for (i = m_MaxFD ; i >= m_MinFD ; i --) {			if (m_pPlayers[i] != NULL || i == m_SocketID) {				m_MaxFD = i;				break;			}		}		// 利例茄 m_MinFD甫 茫瘤 给沁阑 版快,		if (i < m_MinFD) {			FILELOG_INCOMING_CONNECTION( "ICMFD.txt", "[ i < m_MinFD ] nPlayers : %d, MinFD : %d, MaxFD : %d, ServerSocket : %d", m_nPlayers, (int)m_MinFD, (int)m_MaxFD, (int)m_SocketID );			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}GamePlayer* IncomingPlayerManager::getPlayer_NOBLOCKED (const string & id)    throw (NoSuchElementException , Error){	__BEGIN_TRY	GamePlayer* pGamePlayer = NULL;	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (m_pPlayers[i] != NULL) 		{			if (m_pPlayers[i]->getID() == id) 			{				pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);				break;			}		}	}	if (pGamePlayer == NULL) 		throw NoSuchElementException("弊繁 酒捞叼甫 啊柳 敲饭捞绢绰 粮犁窍瘤 臼嚼聪促.");	return pGamePlayer;	__END_CATCH}GamePlayer* IncomingPlayerManager::getPlayer (const string & id)    throw (NoSuchElementException , Error){	__BEGIN_TRY	GamePlayer* pGamePlayer = NULL;	__ENTER_CRITICAL_SECTION(m_Mutex)	pGamePlayer = getPlayer_NOBLOCKED(id);	__LEAVE_CRITICAL_SECTION(m_Mutex)	return pGamePlayer;	__END_CATCH}GamePlayer* IncomingPlayerManager::getReadyPlayer (const string & id)    throw (NoSuchElementException , Error){	__BEGIN_TRY	GamePlayer* pGamePlayer = NULL;	__ENTER_CRITICAL_SECTION(m_Mutex)	list<GamePlayer *>::iterator itr = find_if (m_PlayerListQueue.begin(), m_PlayerListQueue.end(), isSamePlayerbyID(id));	if (itr == m_PlayerListQueue.end()) 	{		throw NoSuchElementException();	} 	else 	{		pGamePlayer = (*itr);		Assert(pGamePlayer != NULL);	}	__LEAVE_CRITICAL_SECTION(m_Mutex)	return pGamePlayer;	__END_CATCH}void IncomingPlayerManager::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 IncomingPlayerManager::pushOutPlayer(GamePlayer* pGamePlayer)	throw(Error)

⌨️ 快捷键说明

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