clreconnectloginhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 275 行
CPP
275 行
//////////////////////////////////////////////////////////////////////////////// Filename : CLReconnectLoginHandler.cpp// Written By : Reiot// Description ://////////////////////////////////////////////////////////////////////////////#include "CLReconnectLogin.h"#ifdef __LOGIN_SERVER__ #include "LoginPlayer.h" #include "Assert.h" #include "DB.h" #include "GameServerInfoManager.h" #include "OptionInfo.h" #include "ReconnectLoginInfoManager.h" #include "Lpackets/LCPCList.h" #include "Gpackets/GCDisconnect.h" #include "Properties.h"#endif//////////////////////////////////////////////////////////////////////////////// CLReconnectLoginHandler::execute()//// 捞 菩哦篮 肺弊牢辑滚俊辑 弥檬肺 霸烙 辑滚肺 楷搬且 锭, 肚绰 霸烙 辑滚俊辑// 促弗 霸烙 辑滚肺 捞悼且 锭, 努扼捞攫飘啊 辑滚肺 傈价窍绰 弥檬狼 菩哦捞促.// 捞锭 敲饭捞绢 按眉绰 货肺 积败抄 惑怕捞绊, 捞 敲饭捞绢 按眉绰 IPM 俊辑// 包府登绰 惑怕捞促. //// 寸楷洒 弥檬狼 菩哦栏肺 促弗 菩哦捞 逞绢坷绰 版快扼搁, 捞巴篮 秦欧 矫档扼绊// 毫档 公规窍骨肺 捞 菩哦捞 弥檬牢瘤 八荤秦具 茄促. 捞甫 困秦辑 敲饭捞绢 按眉俊// 捞傈 菩哦阑 历厘窍绊 乐栏骨肺, 捞 蔼捞 NULL 牢瘤父 焊搁 登摆促.//// 肋给等 菩哦捞扼搁, ban 俊 殿废窍绊 立加阑 辆丰茄促.//////////////////////////////////////////////////////////////////////////////void CLReconnectLoginHandler::execute (CLReconnectLogin* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX #ifdef __LOGIN_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); //cout << "CLReconnectLogin : STARTING HANDLING PROCESS" << endl; LoginPlayer* pLoginPlayer = dynamic_cast<LoginPlayer*>(pPlayer); string PlayerID; //---------------------------------------------------------------------- // 捞 菩哦阑 ReconnectLoginInfo 按眉甫 爱绊 柯促. // 农贰目绰 虐蔼苞 某腐磐 捞抚阑 老沥 矫埃救俊 嘎苗具父 立加捞 啊瓷窍促. //---------------------------------------------------------------------- try { ReconnectLoginInfo* pReconnectLoginInfo = g_pReconnectLoginInfoManager->getReconnectLoginInfo(pLoginPlayer->getSocket()->getHost()); PlayerID = pReconnectLoginInfo->getPlayerID(); // 敲饭捞绢 捞抚阑 历厘茄促. pLoginPlayer->setID(PlayerID); // 虐蔼阑 牢刘茄促. if (pPacket->getKey() != pReconnectLoginInfo->getKey()) throw InvalidProtocolException("invalid key"); // 蝶扼辑, 泅犁 矫埃苞 expire time 阑 厚背茄促. Timeval currentTime; getCurrentTime(currentTime); if (pReconnectLoginInfo->getExpireTime() < currentTime) { // 老窜 昏力茄促. g_pReconnectLoginInfoManager->deleteReconnectLoginInfo(pReconnectLoginInfo->getClientIP()); throw InvalidProtocolException("session already expired"); } // 牢刘登菌栏聪, ReconnectLoginInfo 甫 昏力茄促. g_pReconnectLoginInfoManager->deleteReconnectLoginInfo(pReconnectLoginInfo->getClientIP()); } catch (NoSuchElementException & nsee) // 弊繁 IP甫 啊柳 CI 啊 绝阑 版快 { // 褥.. 楷搬 捞饶 CLReconnectLogin 菩哦阑 焊郴绰 掉饭捞啊 呈公 辨 版快 // session 捞 expire 等促. 捞凡 版快俊档 楼福磊! // (抗甫 甸绢辑, 弥檬 楷搬俊辑绰 己傍沁栏唱 弊促澜俊 叼滚彪 惑怕肺 // 甸绢哎 版快, CLReconnectLogin 菩哦阑 焊尘 锭码俊绰 expire 等促.) GCDisconnect gcDisconnect; gcDisconnect.setMessage(nsee.toString()); pLoginPlayer->sendPacket(&gcDisconnect); // 捞犯霸 带瘤搁 惑困 IPM::processCommands()俊辑 disconnect 贸府茄促. throw InvalidProtocolException("fuck"); } catch (InvalidProtocolException & ipe) { cout << endl << "+-----------------------+" << endl << "| Level 2 Access Denied |" << endl << "+-----------------------+" << endl << endl; GCDisconnect gcDisconnect; gcDisconnect.setMessage(ipe.toString()); pLoginPlayer->sendPacket(&gcDisconnect); // 捞犯霸 带瘤搁 惑困 IPM::processCommands()俊辑 disconnect 贸府茄促. throw; } ServerGroupID_t CurrentServerGroupID = 0; Statement * pGStmt = NULL; Result * pGResult = NULL; // 呼傅~ by sigi. 2002.5.31 PayType payType; string payPlayDate; uint payPlayHours; uint payPlayFlag; try { pGStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pGResult = pGStmt->executeQuery("SELECT CurrentWorldID, CurrentServerGroupID, LogOn, Access, PayType, PayPlayDate, PayPlayHours, PayPlayFlag FROM Player WHERE PlayerID = '%s'", PlayerID.c_str()); // 肺弊牢 咯何甫 眉农茄促. pGResult->next(); WorldID_t CurrentWorldID = pGResult->getInt(1); CurrentServerGroupID = pGResult->getInt(2); pLoginPlayer->setWorldID(CurrentWorldID); pLoginPlayer->setServerGroupID(CurrentServerGroupID); string logon = pGResult->getString(3); payType = (PayType)(pGResult->getInt(5)); payPlayDate = pGResult->getString(6); payPlayHours = pGResult->getInt(7); payPlayFlag = pGResult->getInt(8); if (logon == "GAME" || logon == "LOGON") { string msg = "ReconnectLogin verify failed: LogOn = "; msg += logon; pLoginPlayer->setID("NONE"); throw SQLQueryException(msg); } if (logon == "LOGOFF")// || logon == "GAME") // by sigi. 2002.5.15 { Statement* pStmt = NULL; try { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); /// LogOn捞 'LOGOFF'牢 版快父 LOGON栏肺 汲沥茄促. by sigi. 2002.5.15 pStmt->executeQuery("UPDATE Player SET LogOn='LOGON', CurrentLoginServerID=%d WHERE PlayerID='%s' AND LogOn='LOGOFF'", g_pConfig->getPropertyInt("LoginServerID"), PlayerID.c_str()); // 捞固 'LOGON'捞菌带 版快 // PlayerID啊 绝绰 版快.. if (pStmt->getAffectedRowCount()==0) { cout << endl << "+-----------------------+" << endl << "| Deny Multi Login |" << endl << "+-----------------------+" << endl << endl; throw SQLQueryException("Deny MultiLogin"); } SAFE_DELETE(pStmt); } catch (SQLQueryException & sqe) { SAFE_DELETE(pStmt); throw; } } string access = pGResult->getString(4);// if (access == "DENY" || access == "WAIT") { if (access != "ALLOW") { throw SQLQueryException("ReconnectLogin verify failed "); } #ifdef __PAY_SYSTEM_LOGIN__ string connectIP = pLoginPlayer->getSocket()->getHost(); // 呼傅 by sigi. 2002.5.31 if (!pLoginPlayer->loginPayPlay(payType, payPlayDate, payPlayHours, payPlayFlag, connectIP, PlayerID)) { SAFE_DELETE(pGStmt); throw InvalidProtocolException("Pay First!"); }#elif defined(__PAY_SYSTEM_FREE_LIMIT__) string connectIP = pLoginPlayer->getSocket()->getHost(); // 呼傅 by sigi. 2002.5.31 if (pLoginPlayer->loginPayPlay(payType, payPlayDate, payPlayHours, payPlayFlag, connectIP, PlayerID)) { // Reconnect沁绰单 PayPlay啊 啊瓷窍促绰 巴篮.. // BillingPlay啊 酒聪绊 PayPlay肺 霸烙阑 沁促绰 狼固捞促. // by sigi. 2002.11.22 // 肺弊牢 辑滚俊辑 billing 楷搬 何盒 哗扁肺 沁促. // 局靛呼 夸没 荤亲. by bezz 2003.04.22 //#ifdef __CONNECT_BILLING_SYSTEM__ //pLoginPlayer->setBillingLoginVerified(); //pLoginPlayer->setBillingUserStatus("XX"); //#endif } else { //// BillingPlay肺 霸烙阑 沁菌促绰 狼固捞促. // by sigi. 2002.11.22 // 肺弊牢 辑滚俊辑 billing 楷搬 何盒 哗扁肺 沁促. // 局靛呼 夸没 荤亲. by bezz 2003.04.22 //#ifdef __CONNECT_BILLING_SYSTEM__ //pLoginPlayer->setBillingLoginVerified(); //pLoginPlayer->setBillingUserStatus("HO"); //#endif }#else //elif defined(__PAY_SYSTEM_ZONE__) pLoginPlayer->setPayPlayValue(payType, payPlayDate, payPlayHours, payPlayFlag);#endif SAFE_DELETE(pGStmt); } catch (SQLQueryException & sce) { //cout << sce.toString() << endl; // 孽府 搬苞 棺 孽府巩 按眉甫 昏力茄促. SAFE_DELETE(pGStmt); throw DisconnectException(sce.toString()); } //cout << "CLReconnectLogin : ReconnectLoginInfo verified" << endl; pLoginPlayer->setServerGroupID(CurrentServerGroupID); pLoginPlayer->setPlayerStatus(LPS_PC_MANAGEMENT); //---------------------------------------------------------------------- // 捞力 LCPCList 菩哦阑 父甸绢辑 傈价窍磊 //---------------------------------------------------------------------- LCPCList lcPCList; pLoginPlayer->makePCList( lcPCList ); pLoginPlayer->sendPacket(&lcPCList); pLoginPlayer->setPlayerStatus(LPS_PC_MANAGEMENT);#ifdef __CONNECT_CBILLING_SYSTEM__ pLoginPlayer->setCBillingVerified(); pLoginPlayer->setPayPlayer();#endif#endif __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?