mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-31 01:23:47 +00:00
feat(Core/Database): port TrinityCore database API (#5611)
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
#ifndef AZEROTHCORE_IWORLD_H
|
||||
#define AZEROTHCORE_IWORLD_H
|
||||
|
||||
#include "Callback.h"
|
||||
#include "AsyncCallbackProcessor.h"
|
||||
#include "Common.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "QueryResult.h"
|
||||
|
||||
@@ -2117,7 +2117,7 @@ void World::LoadAutobroadcasts()
|
||||
m_AutobroadcastsWeights.clear();
|
||||
|
||||
uint32 realmId = sConfigMgr->GetOption<int32>("RealmID", 0);
|
||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST);
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST);
|
||||
stmt->setInt32(0, realmId);
|
||||
PreparedQueryResult result = LoginDatabase.Query(stmt);
|
||||
|
||||
@@ -2176,7 +2176,7 @@ void World::Update(uint32 diff)
|
||||
m_timers[WUPDATE_5_SECS].Reset();
|
||||
|
||||
// moved here from HandleCharEnumOpcode
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXPIRED_BANS);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXPIRED_BANS);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
// copy players hashmapholder to avoid mutex
|
||||
@@ -2250,7 +2250,7 @@ void World::Update(uint32 diff)
|
||||
{
|
||||
m_timers[WUPDATE_CLEANDB].Reset();
|
||||
|
||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_OLD_LOGS);
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_OLD_LOGS);
|
||||
|
||||
stmt->setUInt32(0, sWorld->getIntConfig(CONFIG_LOGDB_CLEARTIME));
|
||||
stmt->setUInt32(1, uint32(time(0)));
|
||||
@@ -2291,7 +2291,7 @@ void World::Update(uint32 diff)
|
||||
|
||||
m_timers[WUPDATE_UPTIME].Reset();
|
||||
|
||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_UPTIME_PLAYERS);
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_UPTIME_PLAYERS);
|
||||
|
||||
stmt->setUInt32(0, tmpDiff);
|
||||
stmt->setUInt16(1, uint16(maxOnlinePlayers));
|
||||
@@ -2804,11 +2804,9 @@ void World::SendAutoBroadcast()
|
||||
|
||||
void World::UpdateRealmCharCount(uint32 accountId)
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
|
||||
stmt->setUInt32(0, accountId);
|
||||
stmt->setUInt32(1, accountId);
|
||||
PreparedQueryResultFuture result = CharacterDatabase.AsyncQuery(stmt);
|
||||
m_realmCharCallbacks.insert(result);
|
||||
_queryProcessor.AddCallback(CharacterDatabase.AsyncQuery(stmt).WithPreparedCallback(std::bind(&World::_UpdateRealmCharCount, this, std::placeholders::_1)));
|
||||
}
|
||||
|
||||
void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
|
||||
@@ -2819,9 +2817,9 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
|
||||
uint32 accountId = fields[0].GetUInt32();
|
||||
uint8 charCount = uint8(fields[1].GetUInt64());
|
||||
|
||||
SQLTransaction trans = LoginDatabase.BeginTransaction();
|
||||
LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction();
|
||||
|
||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM);
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM);
|
||||
stmt->setUInt32(0, accountId);
|
||||
stmt->setUInt32(1, realm.Id.Realm);
|
||||
trans->Append(stmt);
|
||||
@@ -2940,7 +2938,7 @@ void World::InitGuildResetTime()
|
||||
|
||||
void World::ResetDailyQuests()
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
|
||||
@@ -2956,7 +2954,7 @@ void World::ResetDailyQuests()
|
||||
|
||||
void World::LoadDBAllowedSecurityLevel()
|
||||
{
|
||||
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL);
|
||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL);
|
||||
stmt->setInt32(0, int32(realm.Id.Realm));
|
||||
PreparedQueryResult result = LoginDatabase.Query(stmt);
|
||||
|
||||
@@ -2975,7 +2973,7 @@ void World::SetPlayerSecurityLimit(AccountTypes _sec)
|
||||
|
||||
void World::ResetWeeklyQuests()
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
|
||||
@@ -2993,7 +2991,7 @@ void World::ResetMonthlyQuests()
|
||||
{
|
||||
LOG_INFO("server.worldserver", "Monthly quests reset for all characters.");
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_MONTHLY);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_MONTHLY);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
|
||||
@@ -3006,7 +3004,7 @@ void World::ResetMonthlyQuests()
|
||||
|
||||
void World::ResetEventSeasonalQuests(uint16 event_id)
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL);
|
||||
stmt->setUInt16(0, event_id);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
@@ -3019,7 +3017,7 @@ void World::ResetRandomBG()
|
||||
{
|
||||
LOG_DEBUG("server.worldserver", "Random BG status reset for all characters.");
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
|
||||
@@ -3154,7 +3152,7 @@ void World::setWorldState(uint32 index, uint64 value)
|
||||
WorldStatesMap::const_iterator it = m_worldstates.find(index);
|
||||
if (it != m_worldstates.end())
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_WORLDSTATE);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_WORLDSTATE);
|
||||
|
||||
stmt->setUInt32(0, uint32(value));
|
||||
stmt->setUInt32(1, index);
|
||||
@@ -3163,7 +3161,7 @@ void World::setWorldState(uint32 index, uint64 value)
|
||||
}
|
||||
else
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_WORLDSTATE);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_WORLDSTATE);
|
||||
|
||||
stmt->setUInt32(0, index);
|
||||
stmt->setUInt32(1, uint32(value));
|
||||
@@ -3181,22 +3179,7 @@ uint64 World::getWorldState(uint32 index) const
|
||||
|
||||
void World::ProcessQueryCallbacks()
|
||||
{
|
||||
PreparedQueryResult result;
|
||||
|
||||
while (!m_realmCharCallbacks.is_empty())
|
||||
{
|
||||
ACE_Future<PreparedQueryResult> lResult;
|
||||
ACE_Time_Value timeout = ACE_Time_Value::zero;
|
||||
if (m_realmCharCallbacks.next_readable(lResult, &timeout) != 1)
|
||||
break;
|
||||
|
||||
if (lResult.ready())
|
||||
{
|
||||
lResult.get(result);
|
||||
_UpdateRealmCharCount(result);
|
||||
lResult.cancel();
|
||||
}
|
||||
}
|
||||
_queryProcessor.ProcessReadyCallbacks();
|
||||
}
|
||||
|
||||
void World::LoadGlobalPlayerDataStore()
|
||||
@@ -3364,7 +3347,7 @@ GlobalPlayerData const* World::GetGlobalPlayerData(ObjectGuid::LowType guid) con
|
||||
return &itr->second;
|
||||
|
||||
// Player is not in the global storage, try to get it from the Database
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_DATA_BY_GUID);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_DATA_BY_GUID);
|
||||
|
||||
stmt->setUInt32(0, guid);
|
||||
|
||||
@@ -3412,7 +3395,7 @@ ObjectGuid World::GetGlobalPlayerGUID(std::string const& name) const
|
||||
return ObjectGuid::Create<HighGuid::Player>(itr->second);
|
||||
|
||||
// Player is not in the global storage, try to get it from the Database
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_DATA_BY_NAME);
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_DATA_BY_NAME);
|
||||
|
||||
stmt->setString(0, name);
|
||||
|
||||
@@ -3467,3 +3450,15 @@ bool World::IsFFAPvPRealm() const
|
||||
{
|
||||
return getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP;
|
||||
}
|
||||
|
||||
uint32 World::GetNextWhoListUpdateDelaySecs()
|
||||
{
|
||||
if (m_timers[WUPDATE_5_SECS].Passed())
|
||||
return 1;
|
||||
|
||||
uint32 t = m_timers[WUPDATE_5_SECS].GetInterval() - m_timers[WUPDATE_5_SECS].GetCurrent();
|
||||
t = std::min(t, (uint32)m_timers[WUPDATE_5_SECS].GetInterval());
|
||||
|
||||
return uint32(ceil(t / 1000.0f));
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#ifndef __WORLD_H
|
||||
#define __WORLD_H
|
||||
|
||||
#include "Callback.h"
|
||||
#include "Common.h"
|
||||
#include "IWorld.h"
|
||||
#include "LockedQueue.h"
|
||||
#include "ObjectGuid.h"
|
||||
@@ -337,14 +335,7 @@ public:
|
||||
static float GetMaxVisibleDistanceInBGArenas() { return m_MaxVisibleDistanceInBGArenas; }
|
||||
|
||||
// our: needed for arena spectator subscriptions
|
||||
uint32 GetNextWhoListUpdateDelaySecs()
|
||||
{
|
||||
if (m_timers[WUPDATE_5_SECS].Passed())
|
||||
return 1;
|
||||
uint32 t = m_timers[WUPDATE_5_SECS].GetInterval() - m_timers[WUPDATE_5_SECS].GetCurrent();
|
||||
t = std::min(t, (uint32)m_timers[WUPDATE_5_SECS].GetInterval());
|
||||
return uint32(ceil(t / 1000.0f));
|
||||
}
|
||||
uint32 GetNextWhoListUpdateDelaySecs();
|
||||
|
||||
// xinef: Global Player Data Storage system
|
||||
void LoadGlobalPlayerDataStore();
|
||||
@@ -493,7 +484,7 @@ private:
|
||||
AutobroadcastsWeightMap m_AutobroadcastsWeights;
|
||||
|
||||
void ProcessQueryCallbacks();
|
||||
ACE_Future_Set<PreparedQueryResult> m_realmCharCallbacks;
|
||||
QueryCallbackProcessor _queryProcessor;
|
||||
};
|
||||
|
||||
std::unique_ptr<IWorld>& getWorldInstance();
|
||||
|
||||
Reference in New Issue
Block a user