diff options
author | Alan Conway <aconway@apache.org> | 2008-11-06 22:40:57 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2008-11-06 22:40:57 +0000 |
commit | 17716fee99670e49a1c3526a44c40d15757d94e3 (patch) | |
tree | a61a44820b9ee72d920a65f3d5683585b652fa76 /cpp/src/qpid/broker/Message.h | |
parent | 2de0473cf8c64e06396c5f5e6a0cf8b5e982514e (diff) | |
download | qpid-python-17716fee99670e49a1c3526a44c40d15757d94e3.tar.gz |
Add Message callbacks for async completion.
Add unit test for async completion.
Add sync parameter to generated session functions, defaults as before but allows greater control.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@711998 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Message.h')
-rw-r--r-- | cpp/src/qpid/broker/Message.h | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/cpp/src/qpid/broker/Message.h b/cpp/src/qpid/broker/Message.h index f7f49f1857..762ec68fe8 100644 --- a/cpp/src/qpid/broker/Message.h +++ b/cpp/src/qpid/broker/Message.h @@ -22,15 +22,15 @@ * */ -#include <string> -#include <vector> -#include <boost/shared_ptr.hpp> -#include <boost/variant.hpp> #include "PersistableMessage.h" #include "MessageAdapter.h" #include "qpid/framing/amqp_types.h" #include "qpid/sys/Mutex.h" #include "qpid/sys/Time.h" +#include "qpid/shared_ptr.h" +#include <boost/function.hpp> +#include <string> +#include <vector> namespace qpid { @@ -48,6 +48,8 @@ class Queue; class Message : public PersistableMessage { public: + typedef boost::function<void (Message&)> MessageCallback; + Message(const framing::SequenceNumber& id = framing::SequenceNumber()); ~Message(); @@ -142,7 +144,19 @@ public: boost::intrusive_ptr<Message>& getReplacementMessage(const Queue* qfor) const; void setReplacementMessage(boost::intrusive_ptr<Message> msg, const Queue* qfor); + /** Call cb when enqueue is complete, may call immediately. Holds cb by reference. */ + void setEnqueueCompleteCallback(const MessageCallback* cb); + + /** Call cb when dequeue is complete, may call immediately. Holds cb by reference. */ + void setDequeueCompleteCallback(const MessageCallback& cb); + private: + typedef std::map<const Queue*,boost::intrusive_ptr<Message> > Replacement; + + MessageAdapter& getAdapter() const; + void allEnqueuesComplete(); + void allDequeuesComplete(); + mutable sys::Mutex lock; framing::FrameSet frames; mutable boost::shared_ptr<Exchange> exchange; @@ -157,11 +171,10 @@ public: static TransferAdapter TRANSFER; - MessageAdapter& getAdapter() const; - typedef std::map<const Queue*,boost::intrusive_ptr<Message> > Replacement; - mutable Replacement replacement; mutable boost::intrusive_ptr<Message> empty; + MessageCallback* enqueueCallback; + MessageCallback* dequeueCallback; }; }} |