Files
2022-10-26 12:25:11 +08:00

196 lines
7.6 KiB
C++

#include "stdafx.h"
#ifdef _NA_008012_20150130_RANKING_SYSTEM
#include "./PortalRankingManager.h"
//==================================================================================================
#if defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION_IN_DBP)
//==================================================================================================
#include <ArchiveOfStream.h>
#include <PacketStruct_DP.h>
#include <PacketStruct_GP.h>
#include "DBProxyServerEx.h"
#include "PacketHandler/Handler_FromGameServer.Ranking.h"
#include "QueryObjects/DBHandler.h"
//==================================================================================================
PortalRankingManager g_RankingMgr;
//==================================================================================================
PortalRankingManager::PortalRankingManager()
: ranking_mode_(eRankingMode_None)
{
}
PortalRankingManager::~PortalRankingManager()
{
}
// RankingManager interfaces
void PortalRankingManager::Initialize()
{
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_ranking",
"|"__FUNCTION__"|{ranking_mode}=", ranking_mode_)));
if (bool not_instanced = !(ranking_mode_ & this->eRankingMode_Instanced))
{
RankingManager::Initialize();
ranking_mode_ = eRankingMode(ranking_mode_ | this->eRankingMode_Instanced);
}
}
void PortalRankingManager::OnScriptsLoaded()
{
ranking_mode_ = eRankingMode(ranking_mode_ | this->eRankingMode_ScriptLoaded);
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_ranking",
"|"__FUNCTION__"|{ranking_mode}=", ranking_mode_)));
}
bool PortalRankingManager::RequestRankingInformationToDB()
{
// NOTE: f110511.1L, remains = { not call 'InitComputation' state }
;{ // change valid states
const int kDesiredBaseInfoPrepared = (eRankingMode_Instanced | eRankingMode_ScriptLoaded);
bool desired_base_info_prepared =
(ranking_mode_ & kDesiredBaseInfoPrepared) == kDesiredBaseInfoPrepared;
if (FlowControl::FCAssert(desired_base_info_prepared) == false) {
return false;
};
bool desired_no_transaction = ((ranking_mode_ & eRankingMode_RankingLoading) == 0);
if (FlowControl::FCAssert(desired_no_transaction) == false) {
return false;
};
};
int period = GetPeriod();
SAFE_NUMERIC_TYPECAST(int, period, BYTE);
WAVERIX_WRAPPER((WAVERIX_LC_CALL3("waverix_log_trace_ranking",
"|"__FUNCTION__"|{old_settled_data, period}=",
GetOldSettledDate(), period)));
MSG_DP_RANKING_INFO_REQ_SYN req_msg;
req_msg.m_SettledStartDate = GetOldSettledDate();
req_msg.m_Period = static_cast<BYTE>(period);
Handler_P2D::OnDP_RANKING_INFO_REQ_SYN(g_DBHandler.GetSharedSession(), &req_msg, sizeof(req_msg));
//
ranking_mode_ = eRankingMode(ranking_mode_ & ~this->eRankingMode_RankingLoaded);
ranking_mode_ = eRankingMode(ranking_mode_ | this->eRankingMode_RankingLoading);
//
return true;
}
void PortalRankingManager::ChangeToRankingLoaded()
{
bool desired_transaction = ((ranking_mode_ & eRankingMode_RankingLoading) != 0);
ASSERT(desired_transaction);
//
ranking_mode_ = eRankingMode(ranking_mode_ & ~this->eRankingMode_RankingLoading);
ranking_mode_ = eRankingMode(ranking_mode_ | this->eRankingMode_RankingLoaded);
//
ASSERT(enabled_service());
//
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_ranking",
"|"__FUNCTION__"|{ranking_mode}=", ranking_mode_)));
;{
MSG_GP_RANKING_SESSION_CONTROL_CMD msg_cmd;
msg_cmd.enabled_service = g_RankingMgr.enabled_service();
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg_cmd, sizeof(msg_cmd));
};
}
// CHANGES: f110511.1L, added inherited method to support session control
void PortalRankingManager::Update()
{
if (enabled_service() == false)
{
const int kPreparedBaseInfo = (eRankingMode_Instanced | eRankingMode_ScriptLoaded);
if (bool not_prepared_base_info = ((ranking_mode_ & kPreparedBaseInfo) != kPreparedBaseInfo)) {
return;
};
if (bool has_transaction = ((ranking_mode_ & eRankingMode_RankingLoading) != 0)) {
return;
};
if (bool need_request_data = ((ranking_mode_ & eRankingMode_RankingLoaded) == 0)) {
RequestRankingInformationToDB();
return;
};
return;
};
base_type::Update();
}
// RankingManager interfaces
void PortalRankingManager::OnChangedStatus()
{
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_ranking",
"|"__FUNCTION__"|{ranking_mode}=", ranking_mode_)));
MSG_GP_RANKING_CHAGED_STATUS_NTF msg;
msg.m_ChangedStatus = static_cast<uint8_t>(GetStatus());
g_DBProxyServer.SendToSessionType(GAME_SERVER, &msg, sizeof(msg));
SUNLOG(eFULL_LOG, "RankingManager Status Change: %d", (int)GetStatus());
}
// RankingManager interfaces
void PortalRankingManager::OnSettled()
{
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_ranking",
"|"__FUNCTION__"|{ranking_mode}=", ranking_mode_)));
MSG_GP_RANKING_SETTLED_INFO_CMD m_msg;
BOOST_STATIC_ASSERT(RANKINGNO(-1) > 0 && RANKINGNO(-1) <= MAX_MAPCODE_NUM &&
eRANKING_MAX < UCHAR_MAX);
static const int MAX_PAGE = 5;
for (int type = 0 ; type < eRANKING_MAX ; ++type)
{
for (int MissionNo = 0 ; MissionNo < MAX_MAPCODE_NUM ; ++MissionNo)
{
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
for (int ranking_type = 1; ranking_type < eRANKING_TYPE_MAX; ++ranking_type)
{
MissionRanking* pRanking = \
FindMissionRanking(eRANKING_TYPE(type), RANKINGNO(MissionNo), RANKINGTYPE(ranking_type));
if (!pRanking) continue;
for (int page = 0 ; page < MAX_PAGE ; ++page)
{
m_msg.m_Type = BYTE(type);
m_msg.m_MissionNo = RANKINGNO(MissionNo);
m_msg.ranking_type = RANKINGTYPE(ranking_type);
m_msg.m_Page = BYTE(page);
m_msg.m_Size = m_msg.MAX_BUFFER_SIZE;
ArchiveOfStream lArchive(m_msg.m_pBUFFER, m_msg.m_Size);
pRanking->Serialize(m_msg.m_Page, lArchive, RANKING_SERIALIZE_LOAD);
m_msg.m_Size = WORD(lArchive.GetSize());
g_DBProxyServer.SendToSessionType(GAME_SERVER, &m_msg, m_msg.GetSize());
}
}
#else
MissionRanking* pRanking = \
FindMissionRanking(eRANKING_TYPE(type), RANKINGNO(MissionNo));
if (!pRanking) continue;
for (int page = 0 ; page < MAX_PAGE ; ++page)
{
m_msg.m_Type = BYTE(type);
m_msg.m_MissionNo = RANKINGNO(MissionNo);
m_msg.m_Page = BYTE(page);
m_msg.m_Size = m_msg.MAX_BUFFER_SIZE;
ArchiveOfStream lArchive(m_msg.m_pBUFFER, m_msg.m_Size);
pRanking->Serialize(m_msg.m_Page, lArchive, RANKING_SERIALIZE_LOAD);
m_msg.m_Size = WORD(lArchive.GetSize());
g_DBProxyServer.SendToSessionType(GAME_SERVER, &m_msg, m_msg.GetSize());
}
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
}
}
MSG_GP_RANKING_SETTLED_INFO_END_NTF ntf;
g_DBProxyServer.SendToSessionType(GAME_SERVER, &ntf, sizeof(ntf));
}
#endif //_NA002635_GP_DP_PROTOCOL_UINIFICATION_IN_DBP
#endif // _NA_008012_20150130_RANKING_SYSTEM