clregisterplayerhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· 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 + -
显示快捷键?