clreconnectloginhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· 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 + -
显示快捷键?