mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
When dynamic zones are cached on zone boot each dz requests member statuses from world separately. This causes a lot of network traffic between world and booted zones when there are a lot of active dzs. This changes it to make a single request to world on zone boot and a single bulk reply back.
40 lines
1.0 KiB
C++
40 lines
1.0 KiB
C++
#ifndef WORLD_DYNAMIC_ZONE_MANAGER_H
|
|
#define WORLD_DYNAMIC_ZONE_MANAGER_H
|
|
|
|
#include "../common/timer.h"
|
|
#include "../common/repositories/dynamic_zone_templates_repository.h"
|
|
#include <memory>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
extern class DynamicZoneManager dynamic_zone_manager;
|
|
|
|
class DynamicZone;
|
|
struct DynamicZoneMember;
|
|
class ServerPacket;
|
|
|
|
class DynamicZoneManager
|
|
{
|
|
public:
|
|
DynamicZoneManager();
|
|
|
|
void CacheAllFromDatabase();
|
|
void CacheNewDynamicZone(ServerPacket* pack);
|
|
DynamicZone* TryCreate(DynamicZone& dz_request, const std::vector<DynamicZoneMember>& members);
|
|
void HandleZoneMessage(ServerPacket* pack);
|
|
void LoadTemplates();
|
|
void Process();
|
|
void PurgeExpiredDynamicZones();
|
|
const auto& GetTemplates() const { return m_dz_templates; }
|
|
|
|
std::unordered_map<uint32_t, std::unique_ptr<DynamicZone>> dynamic_zone_cache;
|
|
|
|
private:
|
|
void SendBulkMemberStatuses(uint32_t zone_id, uint16_t inst_id);
|
|
|
|
Timer m_process_throttle_timer{};
|
|
std::unordered_map<uint32_t, DynamicZoneTemplatesRepository::DynamicZoneTemplates> m_dz_templates;
|
|
};
|
|
|
|
#endif
|