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