Files
dnf-utils/ace_test/aClient/AceReportInterface.cpp
2025-12-06 16:42:21 +08:00

85 lines
2.0 KiB
C++

#include "stdafx.h"
#include "AceReportInterface.h"
#include "GameProto.h"
#include "GameProto.pb.h"
#include "GameClient.h"
struct ACEReportStruct
{
int32_t id;
Game::GameReportReq reportRequest;
ACEReport::CallbackFunction callback;
};
ACEReport::ACEReport()
{
m_nextID = 1;
}
ACEReport::~ACEReport()
{
}
void ACEReport::init(GameClient* client)
{
m_client = client;
}
ACEReportContext ACEReport::createReportContext(
const char* account,
int32_t worldID,
const char* reported_name,
const char* reported_roldid,
ACEReportScene scene,
ACEReportCategory category,
const ACEReportReasonArray& reasons,
DNFReportEntranceID entranceID
)
{
ACEReportStruct* ctx = new ACEReportStruct();
ctx->id = m_nextID++;
ctx->callback = nullptr;
ctx->reportRequest.set_ctx_id(ctx->id);
ctx->reportRequest.set_reported_account_id(account);
ctx->reportRequest.set_reported_world_id(worldID);
ctx->reportRequest.set_reported_name(reported_name);
ctx->reportRequest.set_reported_roleid(reported_roldid);
ctx->reportRequest.set_report_scene(static_cast<int32_t>(scene));
ctx->reportRequest.set_report_category(static_cast<int32_t>(category));
ctx->reportRequest.set_report_entrance(static_cast<int32_t>(entranceID));
for(ACEReportReason reason: reasons)
{
ctx->reportRequest.add_report_reason(static_cast<int32_t>(reason));
}
m_reportStructMap.insert(std::make_pair(ctx->id, ctx));
return ctx;
}
ACEReportStruct* ACEReport::getReport(ACEReportContext ctx)
{
if (ctx == nullptr) return nullptr;
ReportStructMap::iterator it = m_reportStructMap.find(ctx->id);
if (it == m_reportStructMap.end()) return nullptr;
return it->second;
}
bool ACEReport::uploadReport(ACEReportContext ctx, CallbackFunction callback)
{
ACEReportStruct* report = getReport(ctx);
if (report == nullptr) return false;
Game::GameReportReq& reportReq = report->reportRequest;
if(reportReq.report_reason_size() == 0)
{
return false;
}
report->callback = callback;
m_client->sendProtobufMessage(GAME_PROTO_REPORT_REQ, &reportReq);
return true;
}