AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ToCloud9Sidecar Class Reference

#include "TC9Sidecar.h"

Public Member Functions

void Init (uint16 port, int realmId)
 
void Deinit ()
 
bool ClusterModeEnabled ()
 
bool IsCrossrealm ()
 
bool IsMapAssigned (uint32 mapId)
 
void SetupHooks ()
 
void SetupGrpcHandlers ()
 
void ProcessHooks ()
 
void ProcessGrpcOrHttpRequests ()
 
void ProcessAsyncTasks ()
 
uint32 GenerateCharacterGuid (uint16 realmId=DEFAULT_NON_CROSSREALM_REALM_ID)
 
uint32 GenerateItemGuid (uint16 realmId=DEFAULT_NON_CROSSREALM_REALM_ID)
 
uint32 GenerateInstanceGuid (uint16 realmId=DEFAULT_NON_CROSSREALM_REALM_ID)
 
void OnPlayerLeftBattleground (uint64 playerGUID, uint32 realmID, uint32 instanceID)
 
void OnBattlegroundStatusChanged (uint32 instanceID, uint8 status)
 
bool NatsPublish (std::string const &subject, std::string const &payload)
 
bool NatsSubscribe (std::string const &subject, void(*handler)(char const *subject, char const *payload, int payloadLen))
 

Static Public Member Functions

static ToCloud9Sidecarinstance ()
 

Private Member Functions

 ToCloud9Sidecar ()
 
 ~ToCloud9Sidecar ()
 

Static Private Member Functions

static void OnMapsReassigned (uint32 *addedMaps, int addedMapsSize, uint32 *removedMaps, int removedMapsSize)
 

Private Attributes

bool _clusterModeEnabled
 
bool _isCrossrealm
 
bool _assignedMapsByID [MAX_MAP_ID]
 
AsyncCallbackProcessor< AsyncTask< bool > > _asyncTasksProcessor
 

Detailed Description

Constructor & Destructor Documentation

◆ ToCloud9Sidecar()

ToCloud9Sidecar::ToCloud9Sidecar ( )
private
43 : _clusterModeEnabled(false), _isCrossrealm(false)
44{
45}
bool _isCrossrealm
Definition TC9Sidecar.h:69
bool _clusterModeEnabled
Definition TC9Sidecar.h:68

◆ ~ToCloud9Sidecar()

ToCloud9Sidecar::~ToCloud9Sidecar ( )
inlineprivate
32{};

Member Function Documentation

◆ ClusterModeEnabled()

bool ToCloud9Sidecar::ClusterModeEnabled ( )
inline
40{ return _clusterModeEnabled; }

References _clusterModeEnabled.

◆ Deinit()

void ToCloud9Sidecar::Deinit ( )
85{
87 TC9GracefulShutdown();
88}

References _clusterModeEnabled.

◆ GenerateCharacterGuid()

uint32 ToCloud9Sidecar::GenerateCharacterGuid ( uint16  realmId = DEFAULT_NON_CROSSREALM_REALM_ID)
152{
153 return uint32(TC9GetNextAvailableCharacterGuid(realmId));
154}
std::uint32_t uint32
Definition Define.h:107

◆ GenerateInstanceGuid()

uint32 ToCloud9Sidecar::GenerateInstanceGuid ( uint16  realmId = DEFAULT_NON_CROSSREALM_REALM_ID)
162{
163 return uint32(TC9GetNextAvailableInstanceGuid(realmId));
164}

◆ GenerateItemGuid()

uint32 ToCloud9Sidecar::GenerateItemGuid ( uint16  realmId = DEFAULT_NON_CROSSREALM_REALM_ID)
157{
158 return uint32(TC9GetNextAvailableItemGuid(realmId));
159}

◆ Init()

void ToCloud9Sidecar::Init ( uint16  port,
int  realmId 
)
48{
49 _clusterModeEnabled = sConfigMgr->GetOption<bool>("Cluster.Enabled", false);
50
52 {
53 uint32 *assignedMaps;
54 int assignedMapsSize = 0;
55
56 _isCrossrealm = sConfigMgr->GetOption<bool>("Cluster.IsCrossrealm", false);
57
58 std::string availableMaps = sConfigMgr->GetOption<std::string>("Cluster.AvailableMaps", AVAILABLE_MAPS_ALL_MAPS);
59 TC9InitLib(port, realmId, _isCrossrealm, availableMaps.data(), &assignedMaps, &assignedMapsSize);
60
61 for (int i = 0; i < MAX_MAP_ID; i++)
62 _assignedMapsByID[i] = false;
63
64 for (int i = 0; i < assignedMapsSize; i++)
65 {
66 uint32 mapId = assignedMaps[i];
67 if (mapId >= MAX_MAP_ID)
68 {
69 LOG_ERROR("server", "ToCloud9Sidecar::Init: map id {} out of range [0, {}), ignored",
70 mapId, MAX_MAP_ID);
71 continue;
72 }
73 _assignedMapsByID[mapId] = true;
74 }
75
76 if (assignedMapsSize > 0)
77 free(assignedMaps);
78
79 SetupHooks();
81 }
82}
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
#define AVAILABLE_MAPS_ALL_MAPS
Definition TC9Sidecar.cpp:33
#define MAX_MAP_ID
Definition TC9Sidecar.h:26
bool _assignedMapsByID[MAX_MAP_ID]
Definition TC9Sidecar.h:71
void SetupGrpcHandlers()
Definition TC9Sidecar.cpp:108
void SetupHooks()
Definition TC9Sidecar.cpp:90
#define sConfigMgr
Definition Config.h:93

References _assignedMapsByID, _clusterModeEnabled, _isCrossrealm, AVAILABLE_MAPS_ALL_MAPS, LOG_ERROR, MAX_MAP_ID, sConfigMgr, SetupGrpcHandlers(), and SetupHooks().

◆ instance()

ToCloud9Sidecar * ToCloud9Sidecar::instance ( )
static
38{
40 return &instance;
41}
Definition TC9Sidecar.h:29
static ToCloud9Sidecar * instance()
Definition TC9Sidecar.cpp:37

References instance().

Referenced by instance().

◆ IsCrossrealm()

bool ToCloud9Sidecar::IsCrossrealm ( )
inline
41{ return _isCrossrealm; }

References _isCrossrealm.

◆ IsMapAssigned()

bool ToCloud9Sidecar::IsMapAssigned ( uint32  mapId)
144{
145 if (mapId >= MAX_MAP_ID)
146 return false;
147
148 return _assignedMapsByID[mapId];
149}

References _assignedMapsByID, and MAX_MAP_ID.

◆ NatsPublish()

bool ToCloud9Sidecar::NatsPublish ( std::string const &  subject,
std::string const &  payload 
)
177{
179 return false;
180
181 if (payload.size() > size_t(std::numeric_limits<int>::max()))
182 return false;
183
184 return TC9NatsPublish(subject.c_str(), payload.c_str(), int(payload.size())) == 0;
185}

References _clusterModeEnabled.

◆ NatsSubscribe()

bool ToCloud9Sidecar::NatsSubscribe ( std::string const &  subject,
void(*)(char const *subject, char const *payload, int payloadLen)  handler 
)
188{
189 if (!_clusterModeEnabled || !handler)
190 return false;
191
192 return TC9NatsSubscribe(subject.c_str(), handler) == 0;
193}

References _clusterModeEnabled.

◆ OnBattlegroundStatusChanged()

void ToCloud9Sidecar::OnBattlegroundStatusChanged ( uint32  instanceID,
uint8  status 
)
172{
173 TC9BattlegroundStatusChanged(instanceID, status);
174}

◆ OnMapsReassigned()

void ToCloud9Sidecar::OnMapsReassigned ( uint32 addedMaps,
int  addedMapsSize,
uint32 removedMaps,
int  removedMapsSize 
)
staticprivate
196{
197 std::vector<uint32_t> newMapIDs;
198 newMapIDs.reserve(addedMapsSize > 0 ? addedMapsSize : 0);
199
200 for (int i = 0; i < addedMapsSize; i++)
201 {
202 uint32 mapId = addedMaps[i];
203 if (mapId >= MAX_MAP_ID)
204 {
205 LOG_ERROR("server", "ToCloud9Sidecar::OnMapsReassigned: added map id {} out of range [0, {}), ignored",
206 mapId, MAX_MAP_ID);
207 continue;
208 }
209
210 sToCloud9Sidecar->_assignedMapsByID[mapId] = true;
211 newMapIDs.push_back(mapId);
212
213 if (Map* map = sMapMgr->FindBaseNonInstanceMap(mapId))
214 map->StopPlayersRedirectKickTimer();
215 }
216
217 for (int i = 0; i < removedMapsSize; i++)
218 {
219 uint32 mapId = removedMaps[i];
220 if (mapId >= MAX_MAP_ID)
221 {
222 LOG_ERROR("server", "ToCloud9Sidecar::OnMapsReassigned: removed map id {} out of range [0, {}), ignored",
223 mapId, MAX_MAP_ID);
224 continue;
225 }
226
227 sToCloud9Sidecar->_assignedMapsByID[mapId] = false;
228
229 if (Map* map = sMapMgr->FindBaseNonInstanceMap(mapId))
230 map->StartPlayersRedirectKickTimer();
231 }
232
233 if (!newMapIDs.empty())
234 {
235 auto loadRowsPtr = std::make_shared<InstanceMapLoadRows>();
236
237 AsyncTask<bool> task(
238 [loadRowsPtr, newMapIDs]() -> bool {
239 LOG_INFO("server", "Starting to load data for newly assigned maps...");
240
241 *loadRowsPtr = sInstanceSaveMgr->LoadInstanceSavesAndBindsForMapIDs(newMapIDs);
242 return true;
243 },
244 [loadRowsPtr, newMapIDs](bool) {
245 sInstanceSaveMgr->MergeWithNewInstanceSaves(*loadRowsPtr);
246 TC9ReadyToAcceptPlayersFromMaps((uint32_t*)newMapIDs.data(), newMapIDs.size());
247
248 LOG_INFO("server", "Finished loading data for newly assigned maps.");
249 }
250 );
251
252 task.ExecuteAsync();
253 sToCloud9Sidecar->_asyncTasksProcessor.AddCallback(std::move(task));
254 }
255}
#define sInstanceSaveMgr
Definition InstanceSaveMgr.h:233
#define LOG_INFO(filterType__,...)
Definition Log.h:153
#define sMapMgr
Definition MapMgr.h:220
#define sToCloud9Sidecar
Definition TC9Sidecar.h:76
Definition AsyncTask.h:29
void ExecuteAsync()
Definition AsyncTask.h:75
Definition Map.h:167

References AsyncTask< T >::ExecuteAsync(), LOG_ERROR, LOG_INFO, MAX_MAP_ID, sInstanceSaveMgr, sMapMgr, and sToCloud9Sidecar.

Referenced by SetupHooks().

◆ OnPlayerLeftBattleground()

void ToCloud9Sidecar::OnPlayerLeftBattleground ( uint64  playerGUID,
uint32  realmID,
uint32  instanceID 
)
167{
168 TC9PlayerLeftBattleground(playerGUID, realmID, instanceID);
169}

◆ ProcessAsyncTasks()

void ToCloud9Sidecar::ProcessAsyncTasks ( )
139{
141}
void ProcessReadyCallbacks()
Definition AsyncCallbackProcessor.h:40
AsyncCallbackProcessor< AsyncTask< bool > > _asyncTasksProcessor
Definition TC9Sidecar.h:73

References _asyncTasksProcessor, and AsyncCallbackProcessor< T >::ProcessReadyCallbacks().

◆ ProcessGrpcOrHttpRequests()

void ToCloud9Sidecar::ProcessGrpcOrHttpRequests ( )
134{
135 TC9ProcessGRPCOrHTTPRequests();
136}

◆ ProcessHooks()

void ToCloud9Sidecar::ProcessHooks ( )
129{
130 TC9ProcessEventsHooks();
131}

◆ SetupGrpcHandlers()

void ToCloud9Sidecar::SetupGrpcHandlers ( )
109{
110 TC9SetGetPlayerItemsByGuidsHandler(&ToCloud9GrpcHandler::GetPlayerItemsByGuids);
111 TC9SetRemoveItemsWithGuidsFromPlayerHandler(&ToCloud9GrpcHandler::RemoveItemsWithGuidsFromPlayer);
112 TC9SetAddExistingItemToPlayerHandler(&ToCloud9GrpcHandler::AddExistingItemToPlayer);
113
114 TC9SetGetMoneyForPlayerHandler(&ToCloud9GrpcHandler::GetMoneyForPlayer);
115 TC9SetModifyMoneyForPlayerHandler(&ToCloud9GrpcHandler::ModifyMoneyForPlayer);
116
117 TC9SetCanPlayerInteractWithGOAndTypeHandler(&ToCloud9GrpcHandler::CanPlayerInteractWithGOAndType);
118 TC9SetCanPlayerInteractWithNPCAndFlagsHandler(&ToCloud9GrpcHandler::CanPlayerInteractWithNPCAndFlags);
119
120 TC9SetBattlegroundStartHandler(&ToCloud9GrpcHandler::StartBattleground);
121 TC9SetBattlegroundAddPlayersHandler(&ToCloud9GrpcHandler::AddPlayersToBattleground);
122 TC9SetCanPlayerJoinBattlegroundQueueHandler(&ToCloud9GrpcHandler::CanPlayerJoinBattlegroundQueue);
123 TC9SetCanPlayerTeleportToBattlegroundHandler(&ToCloud9GrpcHandler::CanPlayerTeleportToBattleground);
124
125 TC9SetMonitoringDataCollectorHandler(&HandleMonitoringRequest);
126}
MonitoringDataCollectorResponse HandleMonitoringRequest()
Definition TC9Sidecar.cpp:257
static CanPlayerInteractWithNPCAndFlagsResponse CanPlayerInteractWithNPCAndFlags(uint64 player, uint64 npc, uint32 unitFlags)
Definition TC9GrpcHandler.cpp:261
static ModifyMoneyForPlayerResponse ModifyMoneyForPlayer(uint64 player, int32 value)
Definition TC9GrpcHandler.cpp:221
static CanPlayerInteractWithGOAndTypeResponse CanPlayerInteractWithGOAndType(uint64 player, uint64 go, uint8 goType)
Definition TC9GrpcHandler.cpp:245
static BattlegroundJoinCheckErrorCode CanPlayerJoinBattlegroundQueue(uint64 player)
Definition TC9GrpcHandler.cpp:342
static PlayerItemErrorCode AddExistingItemToPlayer(AddExistingItemToPlayerRequest *)
Definition TC9GrpcHandler.cpp:164
static GetMoneyForPlayerResponse GetMoneyForPlayer(uint64 player)
Definition TC9GrpcHandler.cpp:205
static BattlegroundErrorCode AddPlayersToBattleground(BattlegroundAddPlayersRequest *request)
Definition TC9GrpcHandler.cpp:309
static BattlegroundJoinCheckErrorCode CanPlayerTeleportToBattleground(uint64 player)
Definition TC9GrpcHandler.cpp:364
static RemoveItemsWithGuidsFromPlayerResponse RemoveItemsWithGuidsFromPlayer(uint64 player, uint64 *items, int itemsLen, uint64 assignToPlayer)
Definition TC9GrpcHandler.cpp:92
static GetPlayerItemsByGuidsResponse GetPlayerItemsByGuids(uint64 player, uint64 *items, int items_len)
Definition TC9GrpcHandler.cpp:25
static BattlegroundStartResponse StartBattleground(BattlegroundStartRequest *request)
Definition TC9GrpcHandler.cpp:277

References ToCloud9GrpcHandler::AddExistingItemToPlayer(), ToCloud9GrpcHandler::AddPlayersToBattleground(), ToCloud9GrpcHandler::CanPlayerInteractWithGOAndType(), ToCloud9GrpcHandler::CanPlayerInteractWithNPCAndFlags(), ToCloud9GrpcHandler::CanPlayerJoinBattlegroundQueue(), ToCloud9GrpcHandler::CanPlayerTeleportToBattleground(), ToCloud9GrpcHandler::GetMoneyForPlayer(), ToCloud9GrpcHandler::GetPlayerItemsByGuids(), HandleMonitoringRequest(), ToCloud9GrpcHandler::ModifyMoneyForPlayer(), ToCloud9GrpcHandler::RemoveItemsWithGuidsFromPlayer(), and ToCloud9GrpcHandler::StartBattleground().

Referenced by Init().

◆ SetupHooks()

void ToCloud9Sidecar::SetupHooks ( )
91{
92 TC9SetOnMapsReassignedHook(&ToCloud9Sidecar::OnMapsReassigned);
93
94 TC9SetOnGuildMemberLeftHook(&ToCloud9GuildHooks::OnGuildMemberLeft);
95 TC9SetOnGuildMemberAddedHook(&ToCloud9GuildHooks::OnGuildMemberAdded);
96 TC9SetOnGuildMemberRemovedHook(&ToCloud9GuildHooks::OnGuildMemberRemoved);
97
98 TC9SetOnGroupCreatedHook(&ToCloud9GroupHooks::OnGroupCreated);
99 TC9SetOnGroupDisbandedHook(&ToCloud9GroupHooks::OnGroupDisbanded);
100 TC9SetOnGroupMemberAddedHook(&ToCloud9GroupHooks::OnGroupMemberAdded);
101 TC9SetOnGroupMemberRemovedHook(&ToCloud9GroupHooks::OnGroupMemberRemoved);
102 TC9SetOnGroupLootTypeChangedHook(&ToCloud9GroupHooks::OnGroupLootTypeChanged);
103 TC9SetOnGroupConvertedToRaidHook(&ToCloud9GroupHooks::OnGroupConvertedToRaid);
104 TC9SetOnGroupRaidDifficultyChangedHook(&ToCloud9GroupHooks::OnGroupRaidDifficultyChanged);
105 TC9SetOnGroupDungeonDifficultyChangedHook(&ToCloud9GroupHooks::OnGroupDungeonDifficultyChanged);
106}
static void OnGroupRaidDifficultyChanged(uint32 group, uint8 difficulty)
Definition TC9GroupHooks.cpp:101
static void OnGroupMemberRemoved(uint32 group, uint64 member, uint64 newLeader)
Definition TC9GroupHooks.cpp:72
static void OnGroupConvertedToRaid(uint32 group)
Definition TC9GroupHooks.cpp:93
static void OnGroupCreated(EventObjectGroup *group)
Definition TC9GroupHooks.cpp:24
static void OnGroupDungeonDifficultyChanged(uint32 group, uint8 difficulty)
Definition TC9GroupHooks.cpp:109
static void OnGroupMemberAdded(uint32 group, uint64 member)
Definition TC9GroupHooks.cpp:64
static void OnGroupLootTypeChanged(uint32 group, uint8 lootType, uint64 looter, uint8 lootThreshold)
Definition TC9GroupHooks.cpp:80
static void OnGroupDisbanded(uint32 group)
Definition TC9GroupHooks.cpp:56
static void OnGuildMemberRemoved(uint64 guild, uint64 character)
Definition TC9GuildHooks.cpp:31
static void OnGuildMemberLeft(uint64 guild, uint64 character)
Definition TC9GuildHooks.cpp:40
static void OnGuildMemberAdded(uint64 guild, uint64 character)
Definition TC9GuildHooks.cpp:22
static void OnMapsReassigned(uint32 *addedMaps, int addedMapsSize, uint32 *removedMaps, int removedMapsSize)
Definition TC9Sidecar.cpp:195

References ToCloud9GroupHooks::OnGroupConvertedToRaid(), ToCloud9GroupHooks::OnGroupCreated(), ToCloud9GroupHooks::OnGroupDisbanded(), ToCloud9GroupHooks::OnGroupDungeonDifficultyChanged(), ToCloud9GroupHooks::OnGroupLootTypeChanged(), ToCloud9GroupHooks::OnGroupMemberAdded(), ToCloud9GroupHooks::OnGroupMemberRemoved(), ToCloud9GroupHooks::OnGroupRaidDifficultyChanged(), ToCloud9GuildHooks::OnGuildMemberAdded(), ToCloud9GuildHooks::OnGuildMemberLeft(), ToCloud9GuildHooks::OnGuildMemberRemoved(), and OnMapsReassigned().

Referenced by Init().

Member Data Documentation

◆ _assignedMapsByID

bool ToCloud9Sidecar::_assignedMapsByID[MAX_MAP_ID]
private

Referenced by Init(), and IsMapAssigned().

◆ _asyncTasksProcessor

AsyncCallbackProcessor<AsyncTask<bool> > ToCloud9Sidecar::_asyncTasksProcessor
private

Referenced by ProcessAsyncTasks().

◆ _clusterModeEnabled

bool ToCloud9Sidecar::_clusterModeEnabled
private

◆ _isCrossrealm

bool ToCloud9Sidecar::_isCrossrealm
private

Referenced by Init(), and IsCrossrealm().


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