#include "StdAfx.h" #include ".\handler_fromportalserver.h" #if !defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION) #include #include "PortalServerQuery.h" #include "ChildServerSession.h" #include #include #include //================================================================================================== // CHANGES: f110518.2L const nsPacket::PacketHandlerInfo Handler_FromPortalServer::GetPacketHandlerNodes() { #define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), false, phase, Handler_FromPortalServer::On##p } #define HANDLER_NODE_INFO_DBR(c, p, phase) { MAKEWORD(c, p), true, phase, Handler_FromPortalServer::On##p } #define HANDLER_NODE_INFO_EOR() { 0, false, static_cast(0), NULL } static const nsPacket::PacketHandlerNode handlers_static_[] = { // HANDLER_NODE_INFO(DP_RANKING, DP_RANKING_INFO_REQ_SYN, PHASE_UNLIMITED), HANDLER_NODE_INFO_DBR(DP_RANKING, DP_RANKING_INFO_REQ_DBR, PHASE_UNLIMITED), HANDLER_NODE_INFO(DP_RANKING, DP_RANKING_MISSION_CLEAR_SYN, PHASE_UNLIMITED), HANDLER_NODE_INFO_DBR(DP_RANKING, DP_RANKING_MISSION_CLEAR_DBR, PHASE_UNLIMITED), HANDLER_NODE_INFO(DP_RANKING, DP_RANKING_MISSION_REWARD_SYN, PHASE_UNLIMITED), HANDLER_NODE_INFO_DBR(DP_RANKING, DP_RANKING_MISSION_REWARD_DBR, PHASE_UNLIMITED), HANDLER_NODE_INFO(DP_RANKING, DP_RANKING_REGISTER_MISSION_POINT_SYN, PHASE_UNLIMITED), HANDLER_NODE_INFO_DBR(DP_RANKING, DP_RANKING_REGISTER_MISSION_POINT_DBR, PHASE_UNLIMITED), // HANDLER_NODE_INFO_EOR() // end of records }; BOOST_STATIC_ASSERT(_countof(handlers_static_) >= 1); nsPacket::PacketHandlerInfo return_value = { handlers_static_, _countof(handlers_static_) - 1 }; // return return_value; }; //================================================================================================== Handler_FromPortalServer_IMPL( DP_RANKING_INFO_REQ_SYN ) { __TOUCHED((pServerSession, wSize)); MSG_DP_RANKING_INFO_REQ_SYN * pRecvMsg = (MSG_DP_RANKING_INFO_REQ_SYN *)pMsg; static char buff[128]; std::string strQuery = "{?=call S_Ranking_Select( ?, ?, ?,"; strQuery = strQuery + _ultoa( pRecvMsg->m_SettledStartDate, buff, 10 )+","; strQuery = strQuery + _ultoa( pRecvMsg->m_Period, buff, 10 )+") }"; SUNLOG( eDEV_LOG, "[Handler_FromPortalServer_IMPL( DP_RANKING_INFO_REQ_SYN )] %s", strQuery.c_str() ); Query_Ranking_Select * pQuery = Query_Ranking_Select::ALLOC(); pQuery->clear(); //pQuery->SetSessionIndex( pRecvMsg->m_dwSessionIndex ); pQuery->SetQuery( strQuery.c_str() ); pQuery->SetIndex( MAKEDWORD( (WORD)DP_RANKING, (WORD)DP_RANKING_INFO_REQ_DBR ) ); pQuery->SetVoidObject( pServerSession ); pServerSession->DBQuery( pQuery ); } RankingManager g_RankingHelper; Handler_FromPortalServer_IMPL( DP_RANKING_INFO_REQ_DBR ) { __TOUCHED((pServerSession, wSize)); MSG_DBPROXY_RESULT * pResult = (MSG_DBPROXY_RESULT *)pMsg; Query_Ranking_Select * pQResult = (Query_Ranking_Select *)pResult->m_pData; int total = 0; for( int type = 0 ; type < Query_Ranking_Select::MAX_ROWS ; ++type ) { total += pQResult->pParam[0].m_Rows[type]; } if( total < 0 || total > Query_Ranking_Select::RESULT_ROW_NUM ) { SUNLOG( eCRITICAL_LOG, _T("°³¼ö¸¦ ³Ñ¾ú½À´Ï´Ù.(%d>%u)"), total, Query_Ranking_Select::RESULT_ROW_NUM ); Query_Ranking_Select::FREE(pQResult); pQResult = NULL; return ; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// g_RankingHelper.ClearRanking(); SHORT PreRows = 0; ASSERT( Query_Ranking_Select::MAX_ROWS == eRANKING_MAX ); for( int type = 0 ; type < eRANKING_MAX ; ++type ) { SHORT MaxRows = pQResult->pParam[0].m_Rows[type]; Query_Ranking_Select::sQUERY * pData = &pQResult->pResult[PreRows]; for( SHORT row = 0 ; row < MaxRows ; ++row ) { MissionRanking * pRanking = g_RankingHelper.CreateRanking( (eRANKING_TYPE)type, pData[row].m_MissionNo ); ASSERT(pRanking); MissionRankingRecord * pRecord = pRanking->AddRanking_Info( pData[row].m_Key, pData[row].m_ClearTime, pData[row].m_RegisterTime ); ASSERT( pRecord ); BYTE MaxMemberCount = 0; for( ; MaxMemberCount < MAX_PARTYMEMBER_NUM ; ++MaxMemberCount ) { if( 0 == pData[row].m_CharInfo[MaxMemberCount].m_UserGuid ) break; } Query_Ranking_Select::sQUERY::_MEMBER * pMemberInfo = pData[row].m_CharInfo; for( int count = 0 ; count < MaxMemberCount ; ++count ) { pRecord->AddMember_Info( pMemberInfo[count].m_Reward, pMemberInfo[count].m_Class, pMemberInfo[count].m_LV, pMemberInfo[count].m_CharName, pMemberInfo[count].m_GuildName ); SUNLOG( eDEV_LOG, "[Handler_FromPortalServer_IMPL( DP_RANKING_INFO_REQ_DBR )] Type = %d, MissionNo = %d, Name = %s, MemTotal = %d", type, pData[row].m_MissionNo, pMemberInfo[count].m_CharName, MaxMemberCount ); } } PreRows += MaxRows; } g_RankingHelper.SortAll(); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// g_RankingHelper.Display(); static const int MAX_PAGE = 5; static MSG_DP_RANKING_INFO_REQ_ACK msg; //msg.m_dwSessionIndex = pQResult->GetSessionIndex(); for( int type = 0 ; type < eRANKING_MAX ; ++type ) { for( int MissionNo = 0 ; MissionNo < MAX_MAPCODE_NUM ; ++MissionNo ) { MissionRanking * pRanking = g_RankingHelper.FindMissionRanking( (eRANKING_TYPE)type, MissionNo ); if( !pRanking ) continue; for( int page = 0 ; page < MAX_PAGE ; ++page ) { msg.m_Type = type; msg.m_MissionNo = MissionNo; msg.m_Page = page; msg.m_Size = msg.MAX_BUFFER_SIZE; ArchiveOfStream lArchive(msg.m_pBUFFER, msg.m_Size); pRanking->Serialize( msg.m_Page, lArchive, RANKING_SERIALIZE_LOAD ); msg.m_Size = lArchive.GetSize(); pServerSession->SendPacket( &msg, msg.GetSize() ); } } } MSG_DP_RANKING_INFO_REQ_END_NTF ntf; pServerSession->SendPacket( &ntf, sizeof(ntf) ); Query_Ranking_Select::FREE(pQResult); pQResult = NULL; } Handler_FromPortalServer_IMPL( DP_RANKING_MISSION_CLEAR_SYN ) { __TOUCHED((pServerSession, wSize)); MSG_DP_RANKING_MISSION_CLEAR_SYN * pRecvMsg = (MSG_DP_RANKING_MISSION_CLEAR_SYN *)pMsg; _MISSION_RANKING_TOTAL_INFO & rTotalInfo = pRecvMsg->m_totalInfo; SHORT TotalLV = 0; for( int i = 0 ; i < rTotalInfo.m_Count ; ++i ) { TotalLV += rTotalInfo.m_Member[i].m_LV; } static char buff[128]; std::string query_string = "{?=call S_Ranking_Insert(?," ; query_string = query_string+_itoa(rTotalInfo.m_Info.m_MissionNo, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Info.m_ClearTime, buff, 10 )+","; query_string = query_string+_itoa(TotalLV, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Count, buff, 10 )+","; query_string = query_string+_i64toa(rTotalInfo.m_Info.m_RegisterTime, buff, 10 )+",'"; util::GetSQLDateTime_YYYYMMDDHHMMSSNNN( rTotalInfo.m_Info.m_RegisterTime, buff ); query_string = query_string+buff+"'"; for( int i = 0 ; i < rTotalInfo.m_Count ; ++i ) { query_string += ","; query_string = query_string+_itoa(rTotalInfo.m_Member[i].m_UserGuid, buff, 10 )+",'"; query_string = query_string+rTotalInfo.m_Member[i].m_tszCharName+"',"; query_string = query_string+_itoa(rTotalInfo.m_Member[i].m_LV, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Member[i].m_Class, buff, 10 )+",'"; query_string = query_string+rTotalInfo.m_Member[i].m_tszGuildName+"'"; } query_string += ")}"; //DISPMSG( query_string.c_str() ); if( query_string.size() >= Query::MAX_QUERY_LENGTH ) { MSG_DP_RANKING_MISSION_CLEAR_NAK msg; msg.m_MissionNo = rTotalInfo.m_Info.m_MissionNo; msg.m_byErrorCode = RC::RC_RANKING_DBPROXY_SP_LENGTH_OVERFLOW; pServerSession->SendPacket( &msg, sizeof(msg) ); return; } Query_Ranking_Insert * pQuery = Query_Ranking_Insert::ALLOC(); pQuery->SetUserKey( pRecvMsg->m_dwKey ); pQuery->SetSessionIndex( pRecvMsg->m_dwSessionIndex ); pQuery->SetOldRankingKey( pRecvMsg->m_Key ); pQuery->SetMissionNo( rTotalInfo.m_Info.m_MissionNo ); pQuery->SetQuery(query_string.c_str()); pQuery->SetIndex( MAKEDWORD( (WORD)DP_RANKING, (WORD)DP_RANKING_MISSION_CLEAR_DBR ) ); pQuery->SetVoidObject( pServerSession ); pServerSession->DBQuery( pQuery ); } Handler_FromPortalServer_IMPL( DP_RANKING_MISSION_CLEAR_DBR ) { __TOUCHED((pServerSession, wSize)); MSG_DBPROXY_RESULT * pResult = (MSG_DBPROXY_RESULT *)pMsg; Query_Ranking_Insert * pQResult = (Query_Ranking_Insert *)pResult->m_pData; if( !pQResult->ResultSuccess() ) { MSG_DP_RANKING_MISSION_CLEAR_NAK msg; msg.m_dwKey = pQResult->GetUserKey(); msg.m_dwSessionIndex = pQResult->GetSessionIndex(); msg.m_Key = pQResult->GetOldRankingKey(); msg.m_MissionNo = pQResult->GetMissionNo(); msg.m_byErrorCode = RC::RC_RANKING_DBPROXY_SP_TRANS_ERROR; pServerSession->SendPacket( &msg, sizeof(msg) ); SUNLOG( eCRITICAL_LOG, "[DP_RANKING_MISSION_CLEAR_DBR][¿À·ù]:%s", pQResult->GetQuery() ); Query_Ranking_Insert::FREE(pQResult); pQResult = NULL; return; } MSG_DP_RANKING_MISSION_CLEAR_ACK msg; msg.m_dwKey = pQResult->GetUserKey(); msg.m_dwSessionIndex = pQResult->GetSessionIndex(); msg.m_Key = pQResult->GetOldRankingKey(); msg.m_NewKey = pQResult->pParam[0].m_Key; msg.m_MissionNo = pQResult->GetMissionNo(); pServerSession->SendPacket( &msg, sizeof(msg) ); Query_Ranking_Insert::FREE(pQResult); pQResult = NULL; } Handler_FromPortalServer_IMPL( DP_RANKING_MISSION_REWARD_SYN ) { __TOUCHED((pServerSession, wSize)); MSG_DP_RANKING_MISSION_REWARD_SYN * pRecvMsg = (MSG_DP_RANKING_MISSION_REWARD_SYN *)pMsg; char buff[128]; std::string query_string = "{?=call S_Ranking_Reward_Update("; query_string = query_string+_itoa(pRecvMsg->m_Key, buff, 10 )+",'"; query_string = query_string+pRecvMsg->m_tszCharName+"')}"; Query_Ranking_Reward_Update * pQuery = Query_Ranking_Reward_Update::ALLOC(); pQuery->SetSessionIndex( pRecvMsg->m_dwSessionIndex ); pQuery->SetKey(pRecvMsg->m_Key); pQuery->SetUserKey(pRecvMsg->m_dwKey); pQuery->SetCharName(pRecvMsg->m_tszCharName); pQuery->SetMissionNo(pRecvMsg->m_MissionNo); pQuery->SetQuery(query_string.c_str()); pQuery->SetIndex( MAKEDWORD( (WORD)DP_RANKING, (WORD)DP_RANKING_MISSION_REWARD_DBR ) ); pQuery->SetVoidObject( pServerSession ); pServerSession->DBQuery( pQuery ); } Handler_FromPortalServer_IMPL( DP_RANKING_MISSION_REWARD_DBR ) { __TOUCHED((pServerSession, wSize)); MSG_DBPROXY_RESULT * pResult = (MSG_DBPROXY_RESULT *)pMsg; Query_Ranking_Reward_Update * pQResult = (Query_Ranking_Reward_Update *)pResult->m_pData; if( !pQResult->ResultSuccess() ) { MSG_DP_RANKING_MISSION_REWARD_NAK msg; msg.m_dwKey = pQResult->GetUserKey(); msg.m_dwSessionIndex = pQResult->GetSessionIndex(); msg.m_byErrorCode = 2; msg.m_Key = pQResult->GetKey(); _tcsncpy(msg.m_tszCharName, pQResult->GetCharName(), _countof(msg.m_tszCharName)); msg.m_tszCharName[_countof(msg.m_tszCharName) - 1] = _T('\0'); msg.m_MissionNo = pQResult->GetMissionNo(); pServerSession->SendPacket( &msg, sizeof(msg) ); SUNLOG( eCRITICAL_LOG, "[DP_RANKING_MISSION_REWARD_DBR][¿À·ù]:%s", pQResult->GetQuery() ); Query_Ranking_Reward_Update::FREE(pQResult); pQResult = NULL; return; } MSG_DP_RANKING_MISSION_REWARD_ACK msg; msg.m_dwKey = pQResult->GetUserKey(); msg.m_dwSessionIndex = pQResult->GetSessionIndex(); msg.m_Key = pQResult->GetKey(); _tcsncpy(msg.m_tszCharName, pQResult->GetCharName(), _countof(msg.m_tszCharName)); msg.m_tszCharName[_countof(msg.m_tszCharName) - 1] = _T('\0'); msg.m_MissionNo = pQResult->GetMissionNo(); pServerSession->SendPacket( &msg, sizeof(msg) ); Query_Ranking_Reward_Update::FREE(pQResult); pQResult = NULL; } Handler_FromPortalServer_IMPL( DP_RANKING_REGISTER_MISSION_POINT_SYN ) { __TOUCHED((pServerSession, wSize)); MSG_DP_RANKING_REGISTER_MISSION_POINT_SYN* pRecvMsg = (MSG_DP_RANKING_REGISTER_MISSION_POINT_SYN*)pMsg; static char buff[128]; _MISSION_RANKING_TOTAL_INFO & rTotalInfo = pRecvMsg->TotalInfo; std::string query_string = "{?=call S_Ranking_Update_MissionType2(" ; query_string = query_string+_itoa(pRecvMsg->DBKey, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Info.m_MissionNo, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Info.m_ClearTime, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Member[0].m_LV, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Count, buff, 10 )+","; query_string = query_string+_i64toa(rTotalInfo.m_Info.m_RegisterTime, buff, 10 )+",'"; util::GetSQLDateTime_YYYYMMDDHHMMSSNNN( rTotalInfo.m_Info.m_RegisterTime, buff ); query_string = query_string+buff+"',"; query_string = query_string + _ultoa( pRecvMsg->Period, buff, 10 )+","; query_string = query_string + _ultoa( pRecvMsg->SettledStartDate, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Member[0].m_UserGuid, buff, 10 )+",'"; query_string = query_string+rTotalInfo.m_Member[0].m_tszCharName+"',"; query_string = query_string+_itoa(rTotalInfo.m_Member[0].m_LV, buff, 10 )+","; query_string = query_string+_itoa(rTotalInfo.m_Member[0].m_Class, buff, 10 )+",'"; query_string = query_string+rTotalInfo.m_Member[0].m_tszGuildName+"'"; query_string += ")}"; SUNLOG( eDEV_LOG, "[Handler_FromPortalServer_IMPL( DP_RANKING_REGISTER_MISSION_POINT_SYN )] %s = ", query_string.c_str() ); if( query_string.size() >= Query::MAX_QUERY_LENGTH ) { SUNLOG(eFULL_LOG, "DP_RANKING_REGISTER_MISSION_POINT_SYN - DB LENGTH OVERFLOW" ); MSG_DP_RANKING_REGISTER_MISSION_POINT_NAK msg; msg.m_OldKey = pRecvMsg->TempKey; msg.m_MissionNo = rTotalInfo.m_Info.m_MissionNo; msg.m_byErrorCode = RC::RC_RANKING_DBPROXY_SP_LENGTH_OVERFLOW; pServerSession->SendPacket( &msg, sizeof(msg) ); return; } Query_Ranking_Register_Update * pQuery = Query_Ranking_Register_Update::ALLOC(); pQuery->SetUserKey( pRecvMsg->m_dwKey ); pQuery->SetSessionIndex( pRecvMsg->m_dwSessionIndex ); pQuery->SetTempKey( pRecvMsg->TempKey ); pQuery->SetDBKey( pRecvMsg->DBKey); pQuery->SetMissionNo( rTotalInfo.m_Info.m_MissionNo ); pQuery->SetQuery(query_string.c_str()); pQuery->SetIndex( MAKEDWORD( (WORD)DP_RANKING, (WORD)DP_RANKING_REGISTER_MISSION_POINT_DBR ) ); pQuery->SetVoidObject( pServerSession ); pServerSession->DBQuery( pQuery ); } Handler_FromPortalServer_IMPL( DP_RANKING_REGISTER_MISSION_POINT_DBR ) { __TOUCHED((pServerSession, wSize)); MSG_DBPROXY_RESULT * pResult = (MSG_DBPROXY_RESULT *)pMsg; Query_Ranking_Register_Update * pQResult = (Query_Ranking_Register_Update *)pResult->m_pData; if( !pQResult->ResultSuccess() ) { MSG_DP_RANKING_REGISTER_MISSION_POINT_NAK msg; msg.m_dwKey = pQResult->GetUserKey(); msg.m_dwSessionIndex = pQResult->GetSessionIndex(); msg.m_OldKey = pQResult->GetTempKey(); msg.m_MissionNo = pQResult->GetMissionNo(); msg.m_byErrorCode = RC::RC_RANKING_NOT_REGIST_INVALID_PERIOD; pServerSession->SendPacket( &msg, sizeof(msg) ); SUNLOG( eCRITICAL_LOG, "[DP_RANKING_REGISTER_MISSION_POINT_DBR][¿À·ù]:%s", pQResult->GetQuery() ); Query_Ranking_Register_Update::FREE(pQResult); pQResult = NULL; return; } MSG_DP_RANKING_REGISTER_MISSION_POINT_ACK msg; msg.TempKey = pQResult->GetTempKey(); msg.DBKey = pQResult->GetDBKey(); msg.MissionNo = pQResult->GetMissionNo(); pServerSession->SendPacket( &msg, sizeof(msg) ); Query_Ranking_Register_Update::FREE(pQResult); pQResult = NULL; } #endif //if !defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION)