📄 incomingplayermanager.cpp
字号:
} // 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 + -