aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2014-06-24 13:17:23 -0500
committerSubv <subv2112@gmail.com>2014-06-24 13:17:41 -0500
commitf03d49705dc7a0c00350119b319dcf9feb566529 (patch)
treea60451bfe422d75a9378a4c124d7839be5e07789 /src/server/game
parent0a592dd9dbd34818deee472dd42d700b4746a27e (diff)
Core/Databases: Removed ACE dependencies on some of the database handling code.
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Server/WorldSession.cpp22
-rw-r--r--src/server/game/World/World.cpp20
-rw-r--r--src/server/game/World/World.h2
3 files changed, 18 insertions, 26 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 9f8b3785e92..0c391993c0b 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1105,27 +1105,23 @@ void WorldSession::ProcessQueryCallbacks()
PreparedQueryResult result;
//! HandleCharEnumOpcode
- if (_charEnumCallback.ready())
+ if (_charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _charEnumCallback.get(result);
+ result = _charEnumCallback.get();
HandleCharEnum(result);
- _charEnumCallback.cancel();
}
if (_charCreateCallback.IsReady())
{
_charCreateCallback.GetResult(result);
HandleCharCreateCallback(result, _charCreateCallback.GetParam());
- // Don't call FreeResult() here, the callback handler will do that depending on the events in the callback chain
}
//! HandlePlayerLoginOpcode
- if (_charLoginCallback.ready())
+ if (_charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- SQLQueryHolder* param;
- _charLoginCallback.get(param);
+ SQLQueryHolder* param = _charLoginCallback.get();
HandlePlayerLogin((LoginQueryHolder*)param);
- _charLoginCallback.cancel();
}
//! HandleAddFriendOpcode
@@ -1147,11 +1143,10 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleCharAddIgnoreOpcode
- if (_addIgnoreCallback.ready())
+ if (_addIgnoreCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _addIgnoreCallback.get(result);
+ result = _addIgnoreCallback.get();
HandleAddIgnoreOpcodeCallBack(result);
- _addIgnoreCallback.cancel();
}
//- SendStabledPet
@@ -1164,11 +1159,10 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleStablePet
- if (_stablePetCallback.ready())
+ if (_stablePetCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- _stablePetCallback.get(result);
+ result = _stablePetCallback.get();
HandleStablePetCallback(result);
- _stablePetCallback.cancel();
}
//- HandleUnstablePet
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index e5b207d9b46..234a366b08e 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -2731,7 +2731,7 @@ void World::UpdateRealmCharCount(uint32 accountId)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
stmt->setUInt32(0, accountId);
PreparedQueryResultFuture result = CharacterDatabase.AsyncQuery(stmt);
- m_realmCharCallbacks.insert(result);
+ m_realmCharCallbacks.push_back(std::move(result));
}
void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
@@ -3088,19 +3088,17 @@ void World::ProcessQueryCallbacks()
{
PreparedQueryResult result;
- while (!m_realmCharCallbacks.is_empty())
+ for (std::deque<std::future<PreparedQueryResult>>::iterator itr = m_realmCharCallbacks.begin(); itr != m_realmCharCallbacks.end(); )
{
- ACE_Future<PreparedQueryResult> lResult;
- ACE_Time_Value timeout = ACE_Time_Value::zero;
- if (m_realmCharCallbacks.next_readable(lResult, &timeout) != 1)
- break;
-
- if (lResult.ready())
+ if ((*itr).wait_for(std::chrono::seconds(0)) != std::future_status::ready)
{
- lResult.get(result);
- _UpdateRealmCharCount(result);
- lResult.cancel();
+ ++itr;
+ continue;
}
+
+ result = (*itr).get();
+ _UpdateRealmCharCount(result);
+ itr = m_realmCharCallbacks.erase(itr);
}
}
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index f5c0dd1cb8f..9c68ee8add2 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -839,7 +839,7 @@ class World
void LoadCharacterNameData();
void ProcessQueryCallbacks();
- ACE_Future_Set<PreparedQueryResult> m_realmCharCallbacks;
+ std::deque<std::future<PreparedQueryResult>> m_realmCharCallbacks;
};
extern uint32 realmID;