📄 gameplayer.cpp
字号:
// 捞力 捞 菩哦胶飘钒贸甫 檬扁拳茄促. // 菩哦窍困努贰胶俊 沥狼等 read()啊 virtual 皋目聪硫俊 狼秦辑 龋免登绢 // 磊悼利栏肺 檬扁拳等促. m_pInputStream->readPacket(pPacket); // 泅犁 菩哦阑 菩哦 洒胶配府狼 盖 第俊 持绰促. m_PacketHistory.push_back(pPacket); // packet file log甫 巢变促. if ( m_bPacketLog ) { Timeval currentTime; getCurrentTime( currentTime ); if ( currentTime >= m_PacketLogEndTime ) { m_bPacketLog = false; } else { filelog( m_PacketLogFileName.c_str(), "%s", pPacket->toString().c_str() ); } } //cout << "[" << (int)Thread::self() << "] execute before : " << pPacket->getPacketName().c_str() << endl; // 捞力 捞 菩哦胶飘钒贸甫 啊瘤绊 菩哦勤甸矾甫 荐青窍搁 等促. // 菩哦酒捞叼啊 肋给瞪 版快绰 菩哦勤甸矾概聪历俊辑 贸府茄促. try { #ifdef __PROFILE_PACKETS__ beginProfileEx( pPacket->getPacketName().c_str() ); pPacket->execute(this); endProfileEx( pPacket->getPacketName().c_str() ); #else pPacket->execute(this); #endif } catch ( Throwable& t ) { filelog( "GPPC.txt", "%s PacketID : %d", t.toString().c_str(), packetID ); throw; } //cout << "[" << (int)Thread::self() << "] execute after : " << pPacket->getPacketName().c_str() << endl; // 菩哦阑 nPacketHistorySize 俺父怒父 历厘茄促. while (m_PacketHistory.size() > nPacketHistorySize) { Packet* oldPacket = m_PacketHistory.front(); SAFE_DELETE(oldPacket); m_PacketHistory.pop_front(); } } catch (IgnorePacketException & igpe) { // PacketValidator 俊辑 菩哦阑 公矫窍扼绊 沁栏聪, // 涝仿胶飘覆俊辑 葛滴 瘤况滚府绊 角青窍瘤 臼档废 茄促. // 菩哦 农扁啊 呈公 农搁 橇肺配妮 俊矾肺 埃林茄促. if (packetSize > g_pPacketFactoryManager->getPacketMaxSize(packetID)) { filelog("GamePlayer.txt", "Too Larget Packet Size[Ignore], RECV [%d],PacketSize[%d],Name[%s],Host[%s]", packetID, packetSize, ((getCreature()==NULL)?"NULL":getCreature()->getName().c_str()), ((getSocket()==NULL)?"NULL":getSocket()->getHost().c_str())); throw InvalidProtocolException("too large packet sizeIgnore"); } // 涝仿滚欺郴俊 菩哦农扁父怒狼 单捞鸥啊 甸绢乐绰瘤 犬牢茄促. // 弥利拳矫 break 甫 荤侩窍搁 等促. (咯扁辑绰 老窜 exception阑 镜 巴捞促.) if (m_pInputStream->length() < szPacketHeader + packetSize) throw InsufficientDataException(); // 单捞鸥啊 葛滴 档馒沁栏搁, 弊 农扁父怒 公矫窍绊, // 促弗 菩哦阑 贸府窍档废 茄促.... m_pInputStream->skip(szPacketHeader + packetSize); // 公矫等 菩哦篮, expire 俊 康氢阑 林瘤 臼霸 等促. // 溜 蜡瓤茄 菩哦父捞 漏府瘤 臼霸 秦霖促. // 肚茄 洒胶配府俊档 甸绢啊瘤 臼绰促. } } } catch (InsufficientDataException & ide) { // expire time 阑 檬苞沁阑 版快 楷搬阑 辆丰茄促. Timeval currentTime; getCurrentTime(currentTime); if (currentTime >= m_ExpireTime) { filelog("GamePlayer.txt", "Timeout Diconnect. Name[%s],Host[%s]", ((getCreature()==NULL)?"NULL":getCreature()->getName().c_str()), ((getSocket()==NULL)?"NULL":getSocket()->getHost().c_str())); throw DisconnectException("老沥 矫埃悼救 涝仿窍瘤 臼阑 版快, 楷搬阑 辆丰钦聪促."); } } // 林籍贸府 by sigi. 2002.5.14 /* catch (InvalidProtocolException & ipe) { // 立加阑 碍力辆丰矫难具 茄促. 公郊 规过栏肺?? throw; } catch (Throwable & t) { //cerr << t.toString() << endl; //cerr << "GamePlayer Throwable Exception Check!" << endl; throw; } */ __END_CATCH} ////////////////////////////////////////////////////////////////////////// flush output buffer to socket's send buffer//// flush且 悼救 促弗 静饭靛俊辑 免仿 滚欺俊 sendPacket阑 龋免秦辑绰 救等促.// (捞凡 版快绰 辑滚埃 烹脚栏肺 say啊 朝酒坷绰 巴观俊 绝促.)////////////////////////////////////////////////////////////////////////void GamePlayer::processOutput () throw (IOException , Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) int i = 0; try { Player::processOutput(); i = 100000; } catch (InvalidProtocolException & It) { //cerr << "GamePlayer::processOutput Exception Check!!" << endl; //cerr << It.toString() << endl; //cerr << "劳剂记 车绰单...... 酒捞绰 割牢绊?" << (int)i << endl; throw DisconnectException("Pipe 楷搬狼 颇鲍肺 立加阑 楼弗促"); } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}////////////////////////////////////////////////////////////////////////// send packet to player's output buffer////////////////////////////////////////////////////////////////////////void GamePlayer::sendPacket (Packet* pPacket) throw (ProtocolException , Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) try { // packet file log甫 巢变促. if ( m_bPacketLog ) { Timeval currentTime; getCurrentTime( currentTime ); if ( currentTime >= m_PacketLogEndTime ) { m_bPacketLog = false; } else { filelog( m_PacketLogFileName.c_str(), "%s", pPacket->toString().c_str() ); } } Player::sendPacket(pPacket); //cout << "GamePlayer::sendPacket() : " << pPacket->toString() << endl; //cout << "GamePlayer::sendPacket() PACKET SIZE : " << pPacket->getPacketSize() << endl; /* if (getCreature() != NULL) { PacketID_t packetID = pPacket->getPacketID(); switch (packetID) { case Packet::PACKET_GC_UPDATE_INFO: case Packet::PACKET_GC_MOVE_OK: case Packet::PACKET_GC_SET_POSITION: filelog("GamePlayer.txt", "SEND [%s],Name[%s],Host[%s]", pPacket->getPacketName().c_str(), getCreature()->getName().c_str(), getSocket()->getHost().c_str()); break; default: break; } } else { PacketID_t packetID = pPacket->getPacketID(); switch (packetID) { case Packet::PACKET_GC_UPDATE_INFO: case Packet::PACKET_GC_MOVE_OK: case Packet::PACKET_GC_SET_POSITION: filelog("GamePlayer.txt", "SEND [%s],Name[NULL],Host[%s]", pPacket->getPacketName().c_str(), getSocket()->getHost().c_str()); break; default: break; } } */ } catch (InvalidProtocolException & It) { //cout << "GamePlayer::sendPacket Exception Check!!" << endl; //cout << It.toString() << endl; //throw DisconnectException("Pipe 楷搬狼 颇鲍肺 立加阑 楼弗促"); } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}//--------------------------------------------------------------------------------//// disconnect player//// (1) 农府贸啊 粮犁且 版快, 粮俊辑 昏力窍绊 宏肺靛某胶飘茄促.// (2) 农府贸甫 历厘茄促.////--------------------------------------------------------------------------------void GamePlayer::disconnect (bool bDisconnected) throw (InvalidProtocolException, Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) //-------------------------------------------------------------------------------- // 农府贸甫 粮俊辑 昏力茄 饶, 林函狼 PC甸俊霸 宏肺靛某胶飘秦霖促. // 弊促澜 农府贸甫 DB俊 历厘茄促. //-------------------------------------------------------------------------------- string CreatureName = ""; if (m_pCreature != NULL) { CreatureName = m_pCreature->getName(); try { // GPS_NORMAL 牢 版快俊父, 粮俊 农府贸啊 甸绢啊 乐霸 等促. // *CAUTION* // 趣矫 pushPC()啊 龋免等 饶俊 楷搬捞 辆丰登搁 绢痘霸 窍唱.. 扼绊 捌沥且 啊瓷己档 乐促. // 弊矾唱, 贸府 风凭狼 鉴辑甫 肋 混旗焊搁 弊繁 捌沥阑 且 鞘夸啊 绝促. // 绢瞒乔 楷搬捞 谗扁歹扼档, 粮捞 贸府等 饶 农府贸啊 角力 鸥老肺 棵扼埃 促澜, // 促矫 敲饭捞绢狼 贸府风橇啊 倒酒坷扁 锭巩捞促. if (getPlayerStatus() == GPS_NORMAL) { //---------------------------------- // 粮俊辑 昏力窍绊 宏肺靛某胶飘茄促. //---------------------------------- Zone* pZone = m_pCreature->getZone(); Assert(pZone != NULL); pZone->deleteQueuePC(m_pCreature); pZone->deleteCreature(m_pCreature , m_pCreature->getX() , m_pCreature->getY()); //-------------------------------------------------------------------------------- // 农府贸甫 历厘茄促. //-------------------------------------------------------------------------------- m_pCreature->save(); } } catch (Throwable & t) { } } setPlayerStatus(GPS_END_SESSION); //-------------------------------------------------------------------------------- // 酒捞叼啊 汲沥登菌促绰 舵篮, 肺弊牢捞 捞风绢脸促绰 舵捞促. //-------------------------------------------------------------------------------- if (m_ID != "") { Statement* pStmt1 = NULL; Statement* pStmt2 = NULL; BEGIN_DB {// pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); // 肺弊坷橇肺 函版茄促. //pStmt1 = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt1 = g_pDatabaseManager->getDistConnection( "PLAYER_DB" )->createStatement(); // LogOn捞 GAME惑怕牢 版快父 LOGOFF肺 官槽促. by sigi. 2002.5.15 pStmt1->executeQuery("UPDATE Player SET LogOn='LOGOFF', LastLogoutDate=now() WHERE PlayerID = '%s' AND LogOn='GAME'" , m_ID.c_str()); // LogoutPlayerData 俊 眠啊茄促. addLogoutPlayerData(this); if (pStmt1->getAffectedRowCount()==0) { // 捞固 LOGOFF芭唱 // LOGON惑怕牢啊? // 捞凡 荐 乐阑鳖? -_-; } // 呼傅 by sigi. 2002.5.31#if defined(__PAY_SYSTEM_LOGIN__) || defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__) if (isPayPlaying() || isPremiumPlay()) { logoutPayPlay( m_ID ); }#endif SAFE_DELETE(pStmt1); } END_DB(pStmt1) BEGIN_DB { // IP 沥焊甫 昏力秦 霖促. pStmt2 = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt2->executeQuery("DELETE FROM UserIPInfo WHERE Name = '%s'", CreatureName.c_str()); SAFE_DELETE(pStmt2); } END_DB(pStmt2) } // login辑滚肺 啊扼绊 client俊霸 焊辰促. // 盔贰绰 LGIncomingConnectionOKHandler俊辑 贸府沁促. by sigi. 2002.6.19 if (m_pReconnectPacket!=NULL) { //cout << "[SendReconnect] " << m_pReconnectPacket->toString().c_str() << endl; try { //sendPacket( m_pReconnectPacket ); Player::sendPacket( m_pReconnectPacket ); // 免仿 滚欺俊 巢酒乐绰 单捞鸥甫 傈价茄促. m_pOutputStream->flush(); } catch (Throwable & t) { // 公矫 } SAFE_DELETE(m_pReconnectPacket); } // 窃荐 拉何盒俊辑 贸府沁绰单.. 鸥捞怪 巩力(LogOn捞唱 UserIPInfo 殿)肺 // 咯扁辑 谗绢林绊.. 犁立菩哦~阑 焊郴档废 茄促. if (bDisconnected == UNDISCONNECTED) { try { // 努扼捞攫飘俊霸 GCDisconnect 菩哦阑 傈价茄促. //GCDisconnect gcDisconnect; //sendPacket(gcDisconnect); // 免仿 滚欺俊 巢酒乐绰 单捞鸥甫 傈价茄促. m_pOutputStream->flush(); } catch (Throwable & t) { //cerr << "GamePlayer::disconnect() : GamePlayer::disconnect Exception Check!!" << endl; //cerr << t.toString() << endl; } } // 家南 楷搬阑 摧绰促. m_pSocket->close(); __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}////////////////////////////////////////////////////////////////////////// 弥辟 N 锅掳狼 菩哦阑 府畔茄促.// // N == 0 老 版快, 啊厘 弥辟狼 菩哦阑 府畔窍霸 等促.//// 弥措 nPacketHistorySize - 1 鳖瘤 瘤沥且 荐 乐促. ////////////////////////////////////////////////////////////////////////Packet* GamePlayer::getOldPacket (uint prev) throw (OutOfBoundException , NoSuchElementException){ __BEGIN_TRY if (prev >= nPacketHistorySize) throw OutOfBoundException(); // if prev == 0 , return m_PacketHistory[9] // if prev == 9 , return m_PacketHistory[0] Packet* pPacket = m_PacketHistory[ nPacketHistorySize - prev - 1 ]; if (pPacket == NULL) throw NoSuchElementException("packet history is empty"); return pPacket; __END_CATCH}////////////////////////////////////////////////////////////////////////// 漂沥 菩哦酒捞叼甫 啊柳 啊厘 弥辟狼 菩哦阑 府畔茄促.////////////////////////////////////////////////////////////////////////Packet* GamePlayer::getOldPacket (PacketID_t packetID) throw (NoSuchElementException){ __BEGIN_TRY Packet* pPacket = NULL; deque<Packet*>::reverse_iterator ritr = m_PacketHistory.rbegin(); for (; ritr != m_PacketHistory.rend(); ritr++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -