aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-08-24 19:04:25 +0200
committerMachiavelli <none@none>2010-08-24 19:04:25 +0200
commit4185bb318136afe4ea657dc785e8c340d6adddfe (patch)
treedf694da0f464da498e9ba12dcd1051708e721b28 /src
parente5337169c85555df07782ee17fb1928c78b394cf (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.cpp10
-rw-r--r--src/server/game/Server/WorldSession.h2
-rw-r--r--src/server/shared/Threading/Callback.h57
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