From 2f0893d279ddab86ae7c3e4fd1d7a47b15e938f7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 30 Jul 2020 17:41:20 +0200 Subject: Core/Misc: Replace database query in WorldSession::HandleAddFriendOpcode with async version --- src/server/game/Accounts/AccountMgr.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src/server/game/Accounts/AccountMgr.cpp') diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 310c0c19289..36c2e7955cb 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -283,23 +283,25 @@ uint32 AccountMgr::GetId(std::string const& username) return (result) ? (*result)[0].GetUInt32() : 0; } -uint32 AccountMgr::GetSecurity(uint32 accountId) +uint32 AccountMgr::GetSecurity(uint32 accountId, int32 realmId) { - LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCOUNT_ACCESS_GMLEVEL); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_GMLEVEL_BY_REALMID); stmt->setUInt32(0, accountId); + stmt->setInt32(1, realmId); PreparedQueryResult result = LoginDatabase.Query(stmt); return (result) ? (*result)[0].GetUInt8() : uint32(SEC_PLAYER); } -uint32 AccountMgr::GetSecurity(uint32 accountId, int32 realmId) +QueryCallback AccountMgr::GetSecurityAsync(uint32 accountId, int32 realmId, std::function callback) { LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_GMLEVEL_BY_REALMID); stmt->setUInt32(0, accountId); stmt->setInt32(1, realmId); - PreparedQueryResult result = LoginDatabase.Query(stmt); - - return (result) ? (*result)[0].GetUInt8() : uint32(SEC_PLAYER); + return LoginDatabase.AsyncQuery(stmt).WithPreparedCallback([callback = std::move(callback)](PreparedQueryResult result) + { + callback(result ? uint32((*result)[0].GetUInt8()) : uint32(SEC_PLAYER)); + }); } bool AccountMgr::GetName(uint32 accountId, std::string& name) @@ -548,7 +550,7 @@ bool AccountMgr::HasPermission(uint32 accountId, uint32 permissionId, uint32 rea return false; } - rbac::RBACData rbac(accountId, "", realmId, GetSecurity(accountId)); + rbac::RBACData rbac(accountId, "", realmId, GetSecurity(accountId, realmId)); rbac.LoadFromDB(); bool hasPermission = rbac.HasPermission(permissionId); -- cgit v1.2.3