clregisterplayerhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 319 行

CPP
319
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CLRegisterPlayerHandler.cpp// Written By  : Reiot// Description : //////////////////////////////////////////////////////////////////////////////#include "CLRegisterPlayer.h"#ifdef __LOGIN_SERVER__	#include "LoginPlayer.h"	#include "Assert.h"	#include "DB.h"    #include "GameServerGroupInfoManager.h"	#include "Lpackets/LCRegisterPlayerError.h"	#include "Lpackets/LCRegisterPlayerOK.h"#endif//////////////////////////////////////////////////////////////////////////////// 努扼捞攫飘俊辑 敲饭捞绢 殿废 沥焊甫 朝副 版快, 辑滚俊辑绰 快急// 泅犁 酒捞叼啊 "guest"牢瘤 眉农窍绊, 弥檬狼 菩哦牢瘤 眉农茄 饶,// 荤侩磊 沥焊甫 DB俊 殿废窍绊唱辑, 楷搬阑 瞒窜茄促.//////////////////////////////////////////////////////////////////////////////void CLRegisterPlayerHandler::execute (CLRegisterPlayer* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX		#ifdef __LOGIN_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	__BEGIN_DEBUG	LoginPlayer* pLoginPlayer = dynamic_cast<LoginPlayer*>(pPlayer);	//cout << "Registering Player... " << endl;	//----------------------------------------------------------------------	// 肺弊牢 敲饭捞绢狼 酒捞叼啊 guest 牢瘤 眉农茄促.	//----------------------------------------------------------------------//	if (pLoginPlayer->getID() != "guest")//		throw InvalidProtocolException("must be guest user");	//----------------------------------------------------------------------	// 敲饭捞绢 沥焊 八刘	// 阿 胶飘傅狼 辨捞 棺 NULL 咯何甫 眉农茄促.	//----------------------------------------------------------------------	LCRegisterPlayerError lcRegisterPlayerError;	try {		//cout << "敲饭捞绢 沥焊 八刘 : " << pPacket->toString() << endl;		if (pPacket->getID() == "") {			lcRegisterPlayerError.setErrorID(EMPTY_ID);				throw string("ID field is empty");		}		if (pPacket->getID().size() < 4) {			lcRegisterPlayerError.setErrorID(SMALL_ID_LENGTH);				throw string("too small ID length");		}		if (pPacket->getPassword() == "") 		{			lcRegisterPlayerError.setErrorID(EMPTY_PASSWORD);				throw string("Password field is empty");		}		else		{			string password = pPacket->getPassword();			if (password.find("\'") < password.size()) throw string("Invalid Password");			if (password.find("'") < password.size()) throw string("Invalid Password");			else if (password.find("\\") < password.size()) throw string("Invalid Password");			else if (password.find("\"") < password.size()) throw string("Invalid Password");			else if (password.find(";") < password.size()) throw string("Invalid Password");		}		if (pPacket->getPassword().size() < 6) {			lcRegisterPlayerError.setErrorID(SMALL_PASSWORD_LENGTH);				throw string("too small password length");		}		if (pPacket->getName() == "") {			lcRegisterPlayerError.setErrorID(EMPTY_NAME);				throw string("Name field is empty");		}		if (pPacket->getSSN() == "") {			lcRegisterPlayerError.setErrorID(EMPTY_SSN);				throw string("SSN field is empty");		}	} catch (string & errstr) {		pLoginPlayer->sendPacket(&lcRegisterPlayerError);		//cout << lcRegisterPlayerError.toString() << endl;		// 老窜 滚欺甫 敲矾矫窍绊, 楷搬阑 瞒窜茄促.		//		// *TODO*		// 角菩 雀荐甫 历厘茄 饶, 弊 雀荐焊促 累篮 版快俊绰 拌加 楷搬阑 蜡瘤窍档废 茄促.		//		throw DisconnectException(lcRegisterPlayerError.toString());	}			//----------------------------------------------------------------------	// 捞力 单捞鸥海捞胶俊 殿废窍档废 茄促.	//----------------------------------------------------------------------	Statement* pStmt;	Result* pResult;	try {		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		//--------------------------------------------------------------------------------		// 酒捞叼 吝汗 咯何甫 眉农茄促.		//--------------------------------------------------------------------------------		pResult = pStmt->executeQuery("SELECT PlayerID FROM Player WHERE PlayerID = '%s'" , pPacket->getID().c_str());		if (pResult->getRowCount() != 0) {			lcRegisterPlayerError.setErrorID(ALREADY_REGISTER_ID);				throw DuplicatedException("弊繁 酒捞叼啊 捞固 粮犁钦聪促.");		}		//--------------------------------------------------------------------------------		// 林刮殿废锅龋甫 八刘茄促. 唱吝俊.. -_-;		//--------------------------------------------------------------------------------		//--------------------------------------------------------------------------------		// 林刮殿废锅龋 吝汗 咯何甫 眉农茄促. 		//--------------------------------------------------------------------------------		pResult = pStmt->executeQuery("SELECT SSN FROM Player WHERE SSN = '%s'" , pPacket->getSSN().c_str());		if (pResult->getRowCount() != 0) {			lcRegisterPlayerError.setErrorID(ALREADY_REGISTER_SSN);			throw DuplicatedException("捞固 殿废等 林刮殿废锅龋涝聪促.");		}		//--------------------------------------------------------------------------------		// 敲饭捞绢甫 殿废茄促.		//--------------------------------------------------------------------------------		pResult = pStmt->executeQuery(			"INSERT INTO Player (PlayerID , Password , Name , Sex , SSN , Telephone , Cellular , Zipcode , Address , Nation , Email , Homepage , Profile , Pub) VALUES ('%s' , PASSWORD('%s') , '%s' , '%s' , '%s' , '%s' , '%s' , '%s' , '%s' , %d , '%s' , '%s' , '%s' , '%s')" ,			pPacket->getID().c_str() , 			pPacket->getPassword().c_str() , 			pPacket->getName().c_str() , 			Sex2String[ pPacket->getSex() ].c_str() , 			pPacket->getSSN().c_str() , 			pPacket->getTelephone().c_str() , 			pPacket->getCellular().c_str() , 			pPacket->getZipCode().c_str() , 			pPacket->getAddress().c_str() , 			(int)pPacket->getNation() ,			pPacket->getEmail().c_str() , 			pPacket->getHomepage().c_str() , 			pPacket->getProfile().c_str() , 			(pPacket->getPublic() == true) ? "PUBLIC" : "PRIVATE" 		);						// 咯扁鳖瘤 吭促搁, DB俊 敲饭捞绢啊 肋 眠啊登菌促绰 狼固啊 等促.		// 敲饭捞绢俊霸 殿废捞 肋 登菌促绰 LCRegisterPlayerOK 菩哦阑 焊郴磊.		Assert(pResult == NULL);		Assert(pStmt->getAffectedRowCount() == 1);		// 殿废茄 饶 叼弃飘 辑滚狼 弊缝 酒捞叼甫 罐酒柯促.		pResult = pStmt->executeQuery("SELECT CurrentWorldID, CurrentServerGroupID FROM Player WHERE PlayerID = '%s'" , pPacket->getID().c_str());		if (pResult->getRowCount() == 0) {			lcRegisterPlayerError.setErrorID(ETC_ERROR);			throw SQLQueryException("沥惑利栏肺 单捞磐海捞胶啊 涝仿, 免仿 登瘤 臼疽嚼聪促.");		}		WorldID_t 		 WorldID = 0;		ServerGroupID_t  ServerGroupID = 0;		if (pResult->next()) throw SQLQueryException("单捞磐海捞胶俊 摹疙利牢 巩力啊 乐嚼聪促.");		WorldID = pResult->getInt(1);		ServerGroupID = pResult->getInt(2);		pLoginPlayer->setServerGroupID(ServerGroupID);		LCRegisterPlayerOK lcRegisterPlayerOK;		lcRegisterPlayerOK.setGroupName(g_pGameServerGroupInfoManager->getGameServerGroupInfo(ServerGroupID, WorldID)->getGroupName());		string SSN = pPacket->getSSN();		string preSSN;		bool isChina = false;		// 茄惫		if ( strstr(SSN.c_str(), "-") != NULL )		{			preSSN = SSN.substr(0, 6);		}		// 吝惫		else 		{			isChina = true;			if (SSN.size() == 15)			{				preSSN = SSN.substr(6, 12);			}			else if (SSN.size() == 18)			{				preSSN = SSN.substr(8, 14);			}			else			{				// 捞繁 版快绰 绝促绊 窍瘤父 -_- 赣 鞠瓢			 	preSSN = SSN.substr(0, 6);			}		}//        string preSSN = pPacket->getSSN().substr(0, 6).c_str();		StringStream AdultSSN;		time_t daytime = time(0);		tm Timec;		localtime_r( &daytime, &Timec );		AdultSSN << Timec.tm_year - 20 << Timec.tm_mon << Timec.tm_mday;		// 己牢牢瘤 酒囱瘤 林刮殿废 锅龋 眉农		if (atoi(preSSN.c_str()) <= atoi(AdultSSN.toString().c_str())) {			lcRegisterPlayerOK.setAdult(true);		} else {			lcRegisterPlayerOK.setAdult(false);		}		// 吝惫捞搁 公炼扒 己牢		if ( isChina )		{			lcRegisterPlayerOK.setAdult(true);		}		pLoginPlayer->sendPacket(&lcRegisterPlayerOK);		// 捞抚阑 函版秦拎具 茄促.		pLoginPlayer->setID(pPacket->getID());		// 殿废俊 己傍沁阑 版快, CLGetPCList 菩哦阑 扁促赴促.		pLoginPlayer->setPlayerStatus(LPS_WAITING_FOR_CL_GET_PC_LIST);		SAFE_DELETE(pStmt);	} 	catch (DuplicatedException & de) 	{		SAFE_DELETE(pStmt);		//cout << de.toString() << endl;		//--------------------------------------------------------------------------------		// 殿废 角菩 菩哦阑 傈价茄促.		//--------------------------------------------------------------------------------		pLoginPlayer->sendPacket(&lcRegisterPlayerError);		//--------------------------------------------------------------------------------		// 角菩 雀荐甫 刘啊矫挪促. 呈公 腹捞 角菩沁阑 版快, 楷搬阑 辆丰茄促.		//--------------------------------------------------------------------------------		uint nFailed = pLoginPlayer->getFailureCount();		//cout << pLoginPlayer->getID() << "'s Failure Count = " << ++nFailed << endl;		if (nFailed > 3) 			throw DisconnectException("too many failure");		pLoginPlayer->setFailureCount(nFailed);		// 殿废俊 角菩且 版快, 促矫 CLRegisterPlayer 菩哦阑 扁促赴促.		pLoginPlayer->setPlayerStatus(LPS_WAITING_FOR_CL_REGISTER_PLAYER);	} 	catch (SQLQueryException & sqe) 	{		SAFE_DELETE(pStmt);		// 褥. SQL 俊矾捞电瘤 殿废捞 肋 救登菌促绰 家府促.		//cout << sqe.toString() << endl;		//--------------------------------------------------------------------------------		// 殿废 角菩 菩哦阑 傈价茄促.		//--------------------------------------------------------------------------------		lcRegisterPlayerError.setErrorID(ETC_ERROR);		pLoginPlayer->sendPacket(&lcRegisterPlayerError);		//--------------------------------------------------------------------------------		// 角菩 雀荐甫 刘啊矫挪促. 呈公 腹捞 角菩沁阑 版快, 楷搬阑 辆丰茄促.		//--------------------------------------------------------------------------------		uint nFailed = pLoginPlayer->getFailureCount();		//cout << pLoginPlayer->getID() << "'s Failure Count = " << ++nFailed << endl;		if (nFailed > 3) 			throw DisconnectException("too many failure");		pLoginPlayer->setFailureCount(nFailed);		// 殿废俊 角菩且 版快, 促矫 CLRegisterPlayer 菩哦阑 扁促赴促.		pLoginPlayer->setPlayerStatus(LPS_WAITING_FOR_CL_REGISTER_PLAYER);	}	__END_DEBUG#endif			__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?