18#ifndef InstanceLockMgr_h__
19#define InstanceLockMgr_h__
27#include <shared_mutex>
28#include <unordered_map>
62#define INSTANCE_ID_HIGH_MASK 0x1F440000
63#define INSTANCE_ID_LFG_MASK 0x00000001
64#define INSTANCE_ID_NORMAL_MASK 0x00010000
103 bool IsExpired()
const;
118 bool IsNew()
const {
return _isNew; }
172 bool IsInstanceIdBound()
const;
232 std::vector<InstanceLock const*> GetInstanceLocksForPlayer(
ObjectGuid const& playerGuid)
const;
264 void OnSharedInstanceLockDataDelete(
uint32 instanceId);
273 std::pair<InstanceResetTimePoint, InstanceResetTimePoint> UpdateInstanceLockExtensionForPlayer(
ObjectGuid const& playerGuid,
MapDb2Entries const& entries,
bool extended);
284 std::vector<InstanceLock const*>* locksReset, std::vector<InstanceLock const*>* locksFailedToReset);
305 using PlayerLockMap = std::unordered_map<InstanceLockKey, std::unique_ptr<InstanceLock>>;
306 using LockMap = std::unordered_map<ObjectGuid, PlayerLockMap>;
315 bool _unloading =
false;
318#define sInstanceLockMgr InstanceLockMgr::Instance()
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::chrono::system_clock::time_point InstanceResetTimePoint
std::pair< uint32, uint32 > InstanceLockKey
std::optional< T > Optional
Optional helper class to wrap optional values within.
LockMap _temporaryInstanceLocksByPlayer
LockMap _instanceLocksByPlayer
InstanceLockMgr & operator=(InstanceLockMgr const &right)=delete
InstanceLockMgr & operator=(InstanceLockMgr &&right)=delete
std::unordered_map< uint32, std::weak_ptr< SharedInstanceLockData > > _instanceLockDataById
std::unordered_map< InstanceLockKey, std::unique_ptr< InstanceLock > > PlayerLockMap
std::unordered_map< ObjectGuid, PlayerLockMap > LockMap
InstanceLockMgr(InstanceLockMgr const &right)=delete
InstanceLockMgr(InstanceLockMgr &&right)=delete
std::shared_mutex _locksMutex
void SetInstanceId(uint32 instanceId)
virtual InstanceLockData const * GetInstanceInitializationData() const
std::chrono::system_clock::time_point _expiryTime
void SetExtended(bool extended)
void SetInUse(bool inUse)
InstanceResetTimePoint GetExpiryTime() const
Difficulty GetDifficultyId() const
void SetIsNew(bool isNew)
InstanceLock & operator=(InstanceLock const &)=delete
void SetExpiryTime(InstanceResetTimePoint expiryTime)
InstanceLock & operator=(InstanceLock &&)=delete
InstanceLock(InstanceLock const &)=delete
InstanceLock(InstanceLock &&)=delete
InstanceLockData const * GetData() const
InstanceLockData * GetData()
uint32 GetInstanceId() const
SharedInstanceLockData const * GetSharedData() const
SharedInstanceLockData * GetSharedData()
std::shared_ptr< SharedInstanceLockData > _sharedData
InstanceLockData const * GetInstanceInitializationData() const override
uint32 EntranceWorldSafeLocId
InstanceLockData(InstanceLockData const &)=delete
InstanceLockData(InstanceLockData &&)=delete
InstanceLockData & operator=(InstanceLockData const &)=delete
uint32 CompletedEncountersMask
InstanceLockData & operator=(InstanceLockData &&)=delete
virtual ~InstanceLockData()
InstanceLockUpdateEvent(uint32 instanceId, std::string newData, uint32 instanceCompletedEncountersMask, DungeonEncounterEntry const *completedEncounter, Optional< uint32 > entranceWorldSafeLocId)
InstanceLockUpdateEvent(InstanceLockUpdateEvent const &other)=delete
Optional< uint32 > EntranceWorldSafeLocId
uint32 InstanceCompletedEncountersMask
InstanceLockUpdateEvent & operator=(InstanceLockUpdateEvent &&) noexcept
InstanceLockUpdateEvent & operator=(InstanceLockUpdateEvent const &)=delete
DungeonEncounterEntry const * CompletedEncounter
InstanceLockUpdateEvent(InstanceLockUpdateEvent &&other) noexcept
MapDifficultyEntry const * MapDifficulty
SharedInstanceLockData & operator=(SharedInstanceLockData const &)=delete
SharedInstanceLockData & operator=(SharedInstanceLockData &&)=delete
SharedInstanceLockData(SharedInstanceLockData &&)=delete
~SharedInstanceLockData()
SharedInstanceLockData(SharedInstanceLockData const &)=delete