📄 incomingplayermanager.cpp
字号:
{ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_MutexOut) m_PlayerOutListQueue.push_back(pGamePlayer); __LEAVE_CRITICAL_SECTION(m_MutexOut) __END_CATCH}void IncomingPlayerManager::heartbeat() throw(Error) { __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) //-------------------------------------------------- // PlayerQueue狼 Player甫 皋聪廉俊 眠啊茄促. //-------------------------------------------------- // ZPM俊辑 IPM栏肺 甸绢啊绰 版快绰 Status俊 蝶扼辑 贸府窍绰 规侥捞 崔扼柳促. // ZPM俊辑 IPM栏肺 啊绰 辆幅俊绰 滴啊瘤啊 乐促. // 1. 粮捞悼阑 且 版快 GPS_WAITING_FOR_CG_READY 惑怕. // 2. 肺弊酒眶阑 且 版快 GPS_AFTER_SENDING_GL_INCOMING_CONNECTION while(! m_PlayerListQueue.empty()) { GamePlayer* pGamePlayer = m_PlayerListQueue.front(); if (pGamePlayer == NULL) { filelog("ZoneBug.txt", "%s : %s", "Zone::heartbeat(1)", "pGamePlayer啊 NULL涝聪促."); continue; } m_PlayerListQueue.pop_front(); //----------------------------------------------------------------------------- // * elcastle 's Note //----------------------------------------------------------------------------- // 逞绢坷绰 苞沥俊辑 KICKED 敲饭弊啊 吧妨 乐促绰 富篮 厚沥惑 辆丰扼绰 富捞促. // 捞 版快绰 弊成 Disconnect 秦林搁 登绰 巴捞促. // 肺弊酒眶阑 窍绰 版快绰 捞 窜拌俊辑 KICKED啊 吧妨 乐瘤 臼促. // LGIncomingConnectionOK 窜拌俊辑 KICKED 敲饭弊啊 吧妨 乐栏骨肺 球哎府瘤 富磊. // 沥惑利牢 肺弊酒眶狼 版快 捞 眉农俊辑 吧府绰 巴篮 沥惑利捞瘤 给窍促. // 家南狼 俊矾, 厚沥惑 利牢 辆丰狼 版快 咯扁辑 立加阑 谗绢 滚府霸 等促. // 咯扁辑 谗绊 立加 窍绊甫 促 窍绰 捞蜡绰 家南狼 Using 磊盔俊 措茄 目澄饭骇狼 // 阂救沥茄 瘤盔捞 乐阑瘤档 葛福绰 版快甫 措厚秦辑 捞促. // 角力利栏肺档 阂救沥茄 泅惑捞 唱鸥唱绊 乐促. //----------------------------------------------------------------------------- if( pGamePlayer->isPenaltyFlag(PENALTY_TYPE_KICKED) ) { // 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促. int fd = -1; Socket* pSocket = pGamePlayer->getSocket(); if (pSocket!=NULL) fd = (int)pSocket->getSOCKET(); FILELOG_INCOMING_CONNECTION("incomingDisconnect.log", "FD : %d, %s", fd, (pSocket==NULL? "NULL" : pSocket->getHost().c_str()) ); // by sigi. 2002.12.30 if (pGamePlayer->getReconnectPacket()!=NULL) { UserGateway::getInstance()->passUser( UserGateway::USER_OUT_NORMAL ); } else { UserGateway::getInstance()->passUser( UserGateway::USER_OUT_KICKED ); } try { pGamePlayer->disconnect(DISCONNECTED); // Login阑 窍扁 困秦辑 扁粮俊 乐带 某腐磐甫 力芭窍绰 版快捞促. // 捞 锭绰.. LoginServer肺 搬苞 packet阑 焊郴拎具 茄促. // by sigi. 2002.5.4 if (pGamePlayer->isKickForLogin()) { // send GLKickVerify to LoginServer. 2002.5.6 GLKickVerify glKickVerify; glKickVerify.setKicked(true); glKickVerify.setID( pGamePlayer->getSocket()->getSOCKET() ); glKickVerify.setPCName( pGamePlayer->getCreature()->getName() ); g_pLoginServerManager->sendPacket( pGamePlayer->getKickRequestHost(), pGamePlayer->getKickRequestPort(), &glKickVerify ); cout << "LGKickVerify Send Packet to ServerIP : " << pGamePlayer->getKickRequestHost() << endl; cout << "LGKickVerify Send Packet to ServerPort : " << pGamePlayer->getKickRequestPort() << endl; } } catch (Throwable & t) { cerr << t.toString() << endl; } Creature* pCreature = pGamePlayer->getCreature(); if ( pCreature != NULL ) pCreature->setValue(9); SAFE_DELETE(pGamePlayer); continue; } addPlayer_NOBLOCKED(pGamePlayer); //filelog("ZoneHeartbeatTrace.txt", "Added Player[%s]", pGamePlayer->getID().c_str()); // 肯寒洒 Adding阑 场辰 促澜 促澜苞 鞍篮 贸府甫 秦霖促. Status俊 蝶扼辑. // ZPM俊辑 IPM栏肺 肯寒洒 逞绢柯 版快俊 弊俊 蝶弗 菩哦阑 朝赴促. // 粮捞悼阑 窍绰 版快捞促. if (pGamePlayer->getPlayerStatus() == GPS_WAITING_FOR_CG_READY) { Creature * pCreature = pGamePlayer->getCreature(); Assert(pCreature != NULL); Zone* pOldZone = pCreature->getZone(); // by sigi. 2002.5.15 Zone* pZone = pCreature->getNewZone(); //Assert(pZone != NULL); if (pOldZone!=NULL) { // 付胶磐 饭绢俊辑 敲饭捞绢啊 唱啊绰 版快 if (pOldZone->isMasterLair()) { MasterLairManager* pMasterLairManager = pOldZone->getMasterLairManager(); Assert(pMasterLairManager!=NULL); pMasterLairManager->leaveCreature( pCreature ); } // PK 粮俊辑 敲饭捞绢啊 唱啊绰 版快 if (pCreature->isPLAYER() && pZone != NULL && pOldZone->getZoneID() != pZone->getZoneID()) { if(g_pPKZoneInfoManager->isPKZone( pOldZone->getZoneID() )) g_pPKZoneInfoManager->leavePKZone( pOldZone->getZoneID() ); } } 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(); } // 鞠龋拳 内靛 殿废. 瘤陛篮 objectID肺 窍扁 锭巩俊.. by sigi. 2002.11.27#ifdef __USE_ENCRYPTER__ pGamePlayer->setEncryptCode();#endif #if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__) // 呼傅 // 蜡丰粮 --> 公丰粮栏肺 哎 版快 30饭骇 捞窍狼 辆樊力绰 瘤阂 场捞促. if ( ( pGamePlayer->isPayPlaying() || pGamePlayer->isPremiumPlay() ) && pGamePlayer->getPayType() == PAY_TYPE_TIME ) { Assert( pCreature->isPC() ); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPC != NULL ); if ( pPC->canPlayFree() && !pZone->isPayPlay() && !pZone->isPremiumZone() ) { //cout << "LogoutPayPlay:[" << (int)pZone->getZoneID() << "] " // << (int)pZone->isPayPlay() << " , " // << (int)pZone->isPremiumZone() << endl; pGamePlayer->logoutPayPlay( pGamePlayer->getID() ); } } #endif // System Availabilities 沥焊甫 焊郴霖促. SEND_SYSTEM_AVAILABILITIES(pGamePlayer); //-------------------------------------------------------------------------------- // GCUpdateInfo 菩哦阑 父甸绢 朝赴促. //-------------------------------------------------------------------------------- GCUpdateInfo gcUpdateInfo; makeGCUpdateInfo(&gcUpdateInfo, pCreature); pGamePlayer->sendPacket(&gcUpdateInfo); // 肺弊酒眶阑 窍绰 版快捞促. } else if (pGamePlayer->getPlayerStatus() == GPS_AFTER_SENDING_GL_INCOMING_CONNECTION) {// cout << "Logout..." << pGamePlayer->getID() << endl;/* Creature * pCreature = pGamePlayer->getCreature(); // PK 粮俊辑 敲饭捞绢啊 唱啊绰 版快 if ( pCreature != NULL && g_pPKZoneInfoManager->isPKZone( pCreature->getZoneID() )) { g_pPKZoneInfoManager->leavePKZone( pCreature->getZoneID() ); }*/ // 肺弊牢 辑滚肺 GLIncomingConnection阑 焊辰促. // PlayerName苞 ClientIP甫 鞍捞 角绢辑 焊辰促. GLIncomingConnection glIncomingConnection; glIncomingConnection.setPlayerID(pGamePlayer->getID()); glIncomingConnection.setClientIP(pGamePlayer->getSocket()->getHost()); static int portNum = g_pConfig->getPropertyInt("LoginServerUDPPortNum"); int port; if (portNum > 1) { port = g_pConfig->getPropertyInt("LoginServerBaseUDPPort") + rand()%portNum; } else { port = g_pConfig->getPropertyInt("LoginServerUDPPort"); } //cout << "ReconnectAddress = " << g_pConfig->getProperty("LoginServerIP").c_str() << ":" << port << endl; /* if (g_pConfig->getProperty("User") == "excel96") g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection); else if (g_pConfig->getProperty("User") == "elcastle") g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection); else if (g_pConfig->getProperty("User") == "elca") g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection); */ // 弊成 焊辰促. by sigi. 2002.11.26 g_pLoginServerManager->sendPacket(g_pConfig->getProperty("LoginServerIP") , port, &glIncomingConnection); } //filelog("ZoneHeartbeatTrace.txt", "After pop front"); } __LEAVE_CRITICAL_SECTION(m_Mutex) // 唱哎 措扁凯俊 乐绰 荤恩阑 贸府 秦 霖促. // ZPM栏肺 啊绰 荤恩甸阑 贸府窍绰 何盒捞促. 扁成 眠啊 窍搁 瞪 巴捞促. // 绢蠢 粮栏肺 啊绰瘤 舅酒扁 困秦急 Creatue狼 Zone阑 曼炼窍骨肺 固府 Zone阑 茫酒辑 悸泼秦 滴绢具 且 巴. // by sigi. 2002.12.10 __ENTER_CRITICAL_SECTION(m_MutexOut) while(!m_PlayerOutListQueue.empty()) { GamePlayer* pGamePlayer = m_PlayerOutListQueue.front(); m_PlayerOutListQueue.pop_front(); Assert(pGamePlayer != NULL); Creature * pCreature = pGamePlayer->getCreature(); Assert(pCreature != NULL); // getNewZone()捞 货肺 甸绢哎 Zone捞促. by sigi. 2002.5.11 //Zone * pZone = pCreature->getZone(); //Assert(pZone != NULL); Zone * pZone = pCreature->getNewZone(); //Assert(pZone != NULL); // newZone捞 汲沥 救灯栏搁 扁粮 粮栏肺.. -_-; // load()且锭绰 NewZone汲沥阑 救茄促. if (pZone==NULL) { pZone = pCreature->getZone(); Assert(pZone != NULL); } // 甸绢哎 粮狼 PlayerManager甫 茫绰促. ZoneGroup * pZoneGroup = pZone->getZoneGroup(); Assert(pZoneGroup != NULL); ZonePlayerManager * pZonePlayerManager = pZoneGroup->getZonePlayerManager(); Assert(pZonePlayerManager != NULL); // Push 茄促. pZonePlayerManager->pushPlayer(pGamePlayer); } __LEAVE_CRITICAL_SECTION(m_MutexOut) __END_CATCH}void IncomingPlayerManager::deleteQueuePlayer(GamePlayer* pGamePlayer) throw(NoSuchElementException , Error){ __BEGIN_TRY // 鞘夸绝绰 lock牢芭 鞍促. // by sigi. 2002.5.9 // 促弗 lock荤侩. 2002.12.10 __ENTER_CRITICAL_SECTION(m_MutexOut) 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_MutexOut) __END_CATCH}////////////////////////////////////////////////////////////////////////// IncomingPlayerManager 俊 乐绰 葛电 荤侩磊甫 沥府茄促.////////////////////////////////////////////////////////////////////////void IncomingPlayerManager::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 ( i != m_SocketID && 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}// external variable definitionIncomingPlayerManager* g_pIncomingPlayerManager = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -