Files
dnf-utils/ace_test/aServer/AceInterface.cpp
T
2025-12-06 16:42:21 +08:00

182 lines
6.5 KiB
C++

#include "stdafx.h"
#include "AceInterface.h"
#include "GameServer.h"
const wchar_t* AceInterface::kLibraryDir = L"./";
const uint32_t AceInterface::kGameID = 719;
const char* AceInterface::kAuthToken = "79205A21";
const uint32_t AceInterface::kWorldID = 160;
bool AceInterface::initAceInterface()
{
AceSdkServerLibraryInfo library_info;
memset(&library_info, 0, sizeof(AceSdkServerLibraryInfo));
memcpy(library_info.library_dir_, kLibraryDir, wcslen(kLibraryDir)*sizeof(wchar_t));
AceSdkServerAuthInfo auth_info;
memset(&auth_info, 0, sizeof(AceSdkServerAuthInfo));
auth_info.game_id_ = kGameID;
snprintf(auth_info.auth_token_, sizeof(auth_info.auth_token_), "%s", kAuthToken);
AceSdkServerDeploymentInfo deployment_info;
memset(&deployment_info, 0, sizeof(AceSdkServerDeploymentInfo));
deployment_info.region_ = ACE_SDK_REGION_CHINA_MAINLAND;
deployment_info.distributor_ = ACE_SDK_GAME_DISTRIBUTOR_COMMON;
AceSdkResult ret = ace_sdk_server_init(&library_info, &auth_info, &deployment_info);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to init ace sdk server, ret : %d\n", ret);
//return false;
}
//set text judge callback
ret = ace_sdk_server_set_recv_batch_multi_text_result_callback(onAceTextJudgeCallback);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to set text judge callback, ret : %d\n", ret);
//return false;
}
printf(">>ACE SDK server init success.\n");
return true;
}
bool AceInterface::onPlayerLogin(const AceSdkAccount& account, AceSdkTicket& aceTicket, AceSdkLightFeatureResponse& lightFeature)
{
// add player when login
AceSdkPlayerAddInfo add_player_info;
memset(&add_player_info, 0, sizeof(AceSdkPlayerAddInfo));
snprintf(add_player_info.role_name_, sizeof(add_player_info.role_name_) - 1, "qq_%s", account.account_);
AceSdkResult ret = ace_sdk_server_add_player(&account, &add_player_info);
if (ret != 0)
{
printf(">>ACE fail to add player, ret: %d\n", ret);
return false;
}
printf(">>ACE add player success.\n");
// get ticket
memset(&aceTicket, 0, sizeof(AceSdkTicket));
ret = ace_sdk_server_get_ticket(&account, &aceTicket);
if (ret != 0)
{
printf(">>ACE fail to get ace ticket, ret: %d\n", ret);
return false;
}
printf(">>ACE Succ to get ace ticket, len=%u, content=%s\n", aceTicket.ticket_len_, aceTicket.ticket_);
//get light feature
AceSdkLightFeatureRequest lightFeatureReq;
memset(&lightFeatureReq, 0, sizeof(AceSdkLightFeatureRequest));
snprintf(lightFeatureReq.client_version_, sizeof(lightFeatureReq.client_version_) - 1, "%s", "1.0.0");
memset(&lightFeature, 0, sizeof(AceSdkLightFeatureResponse));
ret = ace_sdk_server_get_light_feature(&account, &lightFeatureReq, &lightFeature);
if (ret != 0)
{
printf(">>ACE fail to get ace ticket, ret: %d\n", ret);
return false;
}
printf(">>ACE Succ to get light feature\n");
return true;
}
void AceInterface::onPlayerLogout(const AceSdkAccount& account)
{
AceSdkResult ret = ace_sdk_server_delete_player(&account);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to call ace_sdk_server_delete_player, ret : %d\n", ret);
}
}
void AceInterface::onReceiveClientTickPacket(const AceSdkAccount& account, const uint8_t* packet_buffer, uint32_t packet_len)
{
AceSdkServerPacket serverPacket;
memset(&serverPacket, 0, sizeof(AceSdkServerPacket));
memcpy(&(serverPacket.account_), &account, sizeof(AceSdkAccount));
serverPacket.packet_len_ = packet_len;
memcpy(serverPacket.packet_buffer_, packet_buffer, packet_len);
AceSdkResult ret = ace_sdk_server_on_packet_received(&serverPacket);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to call ace_sdk_server_on_packet_received, ret : %d\n", ret);
}
}
void AceInterface::getServerTickPacket(AceSdkServerPacketList& serverTickPackets)
{
memset(&serverTickPackets, 0, sizeof(AceSdkServerPacketList));
AceSdkResult ret = ace_sdk_server_get_packet(&serverTickPackets);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to call ace_sdk_server_get_packets, ret : %d\n", ret);
}
if (serverTickPackets.packet_num_ > 0)
{
printf(">>ACE call ace_sdk_server_on_packet_received, packet_num : %d\n", serverTickPackets.packet_num_);
}
}
void AceInterface::keepClientAlive(const AceSdkAccount& account)
{
AceSdkResult ret = ace_sdk_server_keep_alive_player(&account);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to call ace_sdk_server_keep_alive, ret : %d\n", ret);
}
}
bool AceInterface::onUGCRequest(const AceSdkAccount& account, int32_t ugcSceneID, const char* content,
int32_t ugcCtxID, int32_t clientID)
{
AceSdkBatchMultiTextInputInfo textInputInfo;
memset(&textInputInfo, 0, sizeof(AceSdkBatchMultiTextInputInfo));
textInputInfo.account_info_ = account;
snprintf(textInputInfo.role_name_, ACE_SDK_UIC_MAX_ROLE_NAME_LEN - 1, "qq_%s", account.account_);
textInputInfo.multi_text_cnt_ = 1;
textInputInfo.multi_text_array_[0].scene_id_ = ugcSceneID;
snprintf(textInputInfo.multi_text_array_[0].text_, ACE_SDK_UIC_MAX_MESSAGE_LEN, "%s", content);
AceTextJudgeCallbackData callbackData;
memset(&callbackData, 0, sizeof(AceTextJudgeCallbackData));
callbackData.clientID = clientID;
callbackData.ugcClientCtxID = ugcCtxID;
textInputInfo.callback_len_ = sizeof(AceTextJudgeCallbackData);
memcpy(textInputInfo.callback_data_, &callbackData, sizeof(AceTextJudgeCallbackData));
AceSdkResult ret = ace_sdk_server_judge_batch_multi_text(&textInputInfo);
if (ret != ACE_SDK_RESULT_OK)
{
printf(">>ACE fail to call ace_sdk_server_judge_batch_multi_text, ret : %d\n", ret);
return false;
}
printf(">>ACE call ace_sdk_server_judge_batch_multi_text\n");
return true;
}
int AceInterface::onAceTextJudgeCallback(const AceSdkUicJudgeResultInfoBatchMultiText* result_info)
{
if (result_info == nullptr) return 0;
if (result_info->callback_len_ != sizeof(AceTextJudgeCallbackData))
{
printf(">>ACE text judge callback data length mismatch, len : %d\n", result_info->callback_len_);
return 0;
}
printf(">>ACE text judge callback received, err_code : %d, multext_result_cnt : %d\n",
result_info->err_code_, result_info->multext_result_cnt_);
AceTextJudgeCallbackData callbackData;
memcpy(&callbackData, result_info->callback_data_, sizeof(AceTextJudgeCallbackData));
GameServer::getSingleton()->onUGCCallback(callbackData.clientID, callbackData.ugcClientCtxID, result_info);
return 0;
}