diff options
author | Machiavelli <none@none> | 2010-08-24 19:04:25 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-08-24 19:04:25 +0200 |
commit | 4185bb318136afe4ea657dc785e8c340d6adddfe (patch) | |
tree | df694da0f464da498e9ba12dcd1051708e721b28 /src | |
parent | e5337169c85555df07782ee17fb1928c78b394cf (diff) |
DBLayer:
- Implement QueryCallback_2 template for ACE_Future callbacks using 2 parameters for the callback function
- Make MSG_LIST_STABLED_PETS“s handler use async query instead of blocking query
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 | ||||
-rw-r--r-- | src/server/shared/Threading/Callback.h | 57 |
3 files changed, 69 insertions, 0 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index b425e5a4c4a..f351e464f24 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1015,4 +1015,14 @@ void WorldSession::ProcessQueryCallbacks() HandleAddIgnoreOpcodeCallBack(result); m_addIgnoreCallback.cancel(); } + + //- SendStabledPet + if (m_sendStabledPetCallback.IsReady()) + { + WorldPacket* param1 = m_sendStabledPetCallback.GetFirstParam(); + uint8 param2 = m_sendStabledPetCallback.GetSecondParam(); + m_sendStabledPetCallback.GetResult(result); + SendStablePetCallback(result, param1, param2); + m_sendStabledPetCallback.FreeResult(); + } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index da9037bc331..6a8549fde2a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -218,6 +218,7 @@ class WorldSession // Pet void SendPetNameQuery(uint64 guid, uint32 petnumber); void SendStablePet(uint64 guid); + void SendStablePetCallback(QueryResult_AutoPtr result, WorldPacket* data, uint8 num); void SendStableResult(uint8 guid); bool CheckStableMaster(uint64 guid); @@ -805,6 +806,7 @@ class WorldSession QueryResultFuture m_addIgnoreCallback; QueryCallback<std::string> m_charRenameCallback; QueryCallback<std::string> m_addFriendCallback; + QueryCallback_2<WorldPacket*, uint8> m_sendStabledPetCallback; QueryResultHolderFuture m_charLoginCallback; private: diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h index 66d21ee64b2..d7fd9781daf 100644 --- a/src/server/shared/Threading/Callback.h +++ b/src/server/shared/Threading/Callback.h @@ -76,4 +76,61 @@ class QueryCallback ParamType param; }; +template <typename ParamType1, typename ParamType2> +class QueryCallback_2 +{ + public: + QueryCallback_2() {} + + void SetFutureResult(QueryResultFuture value) + { + result = value; + } + + QueryResultFuture GetFutureResult() + { + return result; + } + + int IsReady() + { + return result.ready(); + } + + void GetResult(QueryResult_AutoPtr& res) + { + result.get(res); + } + + void FreeResult() + { + result.cancel(); + } + + void SetFirstParam(ParamType1 value) + { + param_1 = value; + } + + void SetSecondParam(ParamType2 value) + { + param_2 = value; + } + + ParamType1 GetFirstParam() + { + return param_1; + } + + ParamType2 GetSecondParam() + { + return param_2; + } + + private: + QueryResultFuture result; + ParamType1 param_1; + ParamType2 param_2; +}; + #endif
\ No newline at end of file |