TrinityCore
Battlenet::GameUtilitiesService Class Reference

#include <WorldserverService.h>

Public Member Functions

 GameUtilitiesService (WorldSession *session)
 
uint32 HandleProcessClientRequest (game_utilities::v1::ClientRequest const *request, game_utilities::v1::ClientResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
 
uint32 HandleGetAllValuesForAttribute (game_utilities::v1::GetAllValuesForAttributeRequest const *request, game_utilities::v1::GetAllValuesForAttributeResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
 
- Public Member Functions inherited from Battlenet::WorldserverService< game_utilities::v1::GameUtilitiesService >
 WorldserverService (WorldSession *session)
 

Private Types

typedef WorldserverService< game_utilities::v1::GameUtilitiesService > BaseService
 
using ClientRequestHandler = uint32(GameUtilitiesService::*)(std::unordered_map< std::string, Variant const * > const &, game_utilities::v1::ClientResponse *)
 

Private Member Functions

uint32 HandleRealmListRequest (std::unordered_map< std::string, Variant const * > const &params, game_utilities::v1::ClientResponse *response)
 
uint32 HandleRealmJoinRequest (std::unordered_map< std::string, Variant const * > const &params, game_utilities::v1::ClientResponse *response)
 

Static Private Attributes

static std::unordered_map< std::string, ClientRequestHandler > const ClientRequestHandlers
 

Additional Inherited Members

- Protected Member Functions inherited from Battlenet::WorldserverService< game_utilities::v1::GameUtilitiesService >
void SendRequest (uint32 serviceHash, uint32 methodId, google::protobuf::Message const *request, std::function< void(MessageBuffer)> callback) override
 
void SendRequest (uint32 serviceHash, uint32 methodId, google::protobuf::Message const *request) override
 
void SendResponse (uint32 serviceHash, uint32 methodId, uint32 token, uint32 status) override
 
void SendResponse (uint32 serviceHash, uint32 methodId, uint32 token, google::protobuf::Message const *response) override
 
std::string GetCallerInfo () const override
 
- Protected Attributes inherited from Battlenet::WorldserverService< game_utilities::v1::GameUtilitiesService >
WorldSession_session
 

Detailed Description

Definition at line 60 of file WorldserverService.h.

Member Typedef Documentation

◆ BaseService

typedef WorldserverService<game_utilities::v1::GameUtilitiesService> Battlenet::GameUtilitiesService::BaseService
private

Definition at line 62 of file WorldserverService.h.

◆ ClientRequestHandler

using Battlenet::GameUtilitiesService::ClientRequestHandler = uint32(GameUtilitiesService::*)(std::unordered_map<std::string, Variant const*> const&, game_utilities::v1::ClientResponse*)
private

Definition at line 71 of file WorldserverService.h.

Constructor & Destructor Documentation

◆ GameUtilitiesService()

Battlenet::GameUtilitiesService::GameUtilitiesService ( WorldSession session)

Definition at line 35 of file WorldserverService.cpp.

35 : BaseService(session)
36{
37}
WorldserverService< game_utilities::v1::GameUtilitiesService > BaseService

Member Function Documentation

◆ HandleGetAllValuesForAttribute()

uint32 Battlenet::GameUtilitiesService::HandleGetAllValuesForAttribute ( game_utilities::v1::GetAllValuesForAttributeRequest const *  request,
game_utilities::v1::GetAllValuesForAttributeResponse *  response,
std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &  continuation 
)
override

Definition at line 134 of file WorldserverService.cpp.

135{
136 if (request->attribute_key().find("Command_RealmListRequest_v1") == 0)
137 {
138 sRealmList->WriteSubRegions(response);
139 return ERROR_OK;
140 }
141
143}
@ ERROR_RPC_NOT_IMPLEMENTED
#define sRealmList
Definition: RealmList.h:96

◆ HandleProcessClientRequest()

uint32 Battlenet::GameUtilitiesService::HandleProcessClientRequest ( game_utilities::v1::ClientRequest const *  request,
game_utilities::v1::ClientResponse *  response,
std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &  continuation 
)
override

Definition at line 39 of file WorldserverService.cpp.

40{
41 Attribute const* command = nullptr;
42 std::unordered_map<std::string, Variant const*> params;
43 auto removeSuffix = [](std::string const& string) -> std::string
44 {
45 size_t pos = string.rfind('_');
46 if (pos != std::string::npos)
47 return string.substr(0, pos);
48
49 return string;
50 };
51
52 for (int32 i = 0; i < request->attribute_size(); ++i)
53 {
54 Attribute const& attr = request->attribute(i);
55 if (strstr(attr.name().c_str(), "Command_") == attr.name().c_str())
56 {
57 command = &attr;
58 params[removeSuffix(attr.name())] = &attr.value();
59 }
60 else
61 params[attr.name()] = &attr.value();
62 }
63
64 if (!command)
65 {
66 TC_LOG_ERROR("session.rpc", "{} sent ClientRequest with no command.", GetCallerInfo());
68 }
69
70 auto itr = ClientRequestHandlers.find(removeSuffix(command->name()));
71 if (itr == ClientRequestHandlers.end())
72 {
73 TC_LOG_ERROR("session.rpc", "{} sent ClientRequest with unknown command {}.", GetCallerInfo(), removeSuffix(command->name()));
75 }
76
77 return (this->*itr->second)(params, response);
78}
@ ERROR_RPC_MALFORMED_REQUEST
int32_t int32
Definition: Define.h:139
std::unordered_set< uint32 > params[2]
Definition: DisableMgr.cpp:50
#define TC_LOG_ERROR(filterType__,...)
Definition: Log.h:165
static std::unordered_map< std::string, ClientRequestHandler > const ClientRequestHandlers
const ::bgs::protocol::Variant & value() const
const ::std::string & name() const
+ Here is the call graph for this function:

◆ HandleRealmJoinRequest()

uint32 Battlenet::GameUtilitiesService::HandleRealmJoinRequest ( std::unordered_map< std::string, Variant const * > const &  params,
game_utilities::v1::ClientResponse *  response 
)
private

Definition at line 125 of file WorldserverService.cpp.

126{
127 if (Variant const* realmAddress = GetParam(params, "Param_RealmAddress"))
128 return sRealmList->JoinRealm(uint32(realmAddress->uint_value()), realm.Build, Trinity::Net::make_address(_session->GetRemoteAddress()), _session->GetRealmListSecret(),
130
132}
@ ERROR_WOW_SERVICES_INVALID_JOIN_TICKET
uint32_t uint32
Definition: Define.h:143
static Variant const * GetParam(std::unordered_map< std::string, Variant const * > const &params, char const *paramName)
std::array< uint8, 32 > const & GetRealmListSecret() const
Minutes GetTimezoneOffset() const
LocaleConstant GetSessionDbcLocale() const
std::string const & GetOS() const
std::string const & GetAccountName() const
std::string const & GetRemoteAddress() const
Realm realm
Definition: World.cpp:3984
uint32 Build
Definition: Realm.h:83
+ Here is the call graph for this function:

◆ HandleRealmListRequest()

uint32 Battlenet::GameUtilitiesService::HandleRealmListRequest ( std::unordered_map< std::string, Variant const * > const &  params,
game_utilities::v1::ClientResponse *  response 
)
private

Definition at line 86 of file WorldserverService.cpp.

87{
88 std::string subRegionId;
89 if (Variant const* subRegion = GetParam(params, "Command_RealmListRequest_v1"))
90 subRegionId = subRegion->string_value();
91
92 std::vector<uint8> compressed = sRealmList->GetRealmList(realm.Build, subRegionId);
93
94 if (compressed.empty())
96
97 Attribute* attribute = response->add_attribute();
98 attribute->set_name("Param_RealmList");
99 attribute->mutable_value()->set_blob_value(compressed.data(), compressed.size());
100
101 JSON::RealmList::RealmCharacterCountList realmCharacterCounts;
102 for (auto const& characterCount : _session->GetRealmCharacterCounts())
103 {
104 ::JSON::RealmList::RealmCharacterCountEntry* countEntry = realmCharacterCounts.add_counts();
105 countEntry->set_wowrealmaddress(characterCount.first);
106 countEntry->set_count(characterCount.second);
107 }
108
109 std::string json = "JSONRealmCharacterCountList:" + JSON::Serialize(realmCharacterCounts);
110
111 uLongf compressedLength = compressBound(json.length());
112 compressed.resize(4 + compressedLength);
113 *reinterpret_cast<uint32*>(compressed.data()) = json.length() + 1;
114
115 if (compress(compressed.data() + 4, &compressedLength, reinterpret_cast<uint8 const*>(json.c_str()), json.length() + 1) != Z_OK)
117
118 attribute = response->add_attribute();
119 attribute->set_name("Param_CharacterCountList");
120 attribute->mutable_value()->set_blob_value(compressed.data(), compressedLength + 4);
121
122 return ERROR_OK;
123}
@ ERROR_UTIL_SERVER_FAILED_TO_SERIALIZE_RESPONSE
uint8_t uint8
Definition: Define.h:145
void set_wowrealmaddress(::google::protobuf::uint32 value)
void set_count(::google::protobuf::uint32 value)
inline ::JSON::RealmList::RealmCharacterCountEntry * add_counts()
std::unordered_map< uint32, uint8 > const & GetRealmCharacterCounts() const
inline ::bgs::protocol::Variant * mutable_value()
void set_name(const ::std::string &value)
void set_blob_value(const ::std::string &value)
TC_SHARED_API std::string Serialize(google::protobuf::Message const &message)
+ Here is the call graph for this function:

Member Data Documentation

◆ ClientRequestHandlers

std::unordered_map< std::string, Battlenet::GameUtilitiesService::ClientRequestHandler > const Battlenet::GameUtilitiesService::ClientRequestHandlers
staticprivate
Initial value:
=
{
{ "Command_RealmListRequest_v1", &GameUtilitiesService::HandleRealmListRequest },
{ "Command_RealmJoinRequest_v1", &GameUtilitiesService::HandleRealmJoinRequest }
}
uint32 HandleRealmJoinRequest(std::unordered_map< std::string, Variant const * > const &params, game_utilities::v1::ClientResponse *response)
uint32 HandleRealmListRequest(std::unordered_map< std::string, Variant const * > const &params, game_utilities::v1::ClientResponse *response)

Definition at line 72 of file WorldserverService.h.


The documentation for this class was generated from the following files: