00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _Consumer_
00022 #define _Consumer_
00023
00024 namespace qpid {
00025 namespace broker {
00026 class Queue;
00027 }}
00028
00029 #include "Message.h"
00030 #include "OwnershipToken.h"
00031
00032 namespace qpid {
00033 namespace broker {
00034
00035 struct QueuedMessage
00036 {
00037 boost::intrusive_ptr<Message> payload;
00038 framing::SequenceNumber position;
00039 Queue* queue;
00040
00041 QueuedMessage(Queue* q, boost::intrusive_ptr<Message> msg, framing::SequenceNumber sn) :
00042 payload(msg), position(sn), queue(q) {}
00043 QueuedMessage(Queue* q) : queue(q) {}
00044 };
00045
00046
00047 class Consumer {
00048 const bool acquires;
00049 public:
00050 typedef shared_ptr<Consumer> ptr;
00051
00052 framing::SequenceNumber position;
00053
00054 Consumer(bool preAcquires = true) : acquires(preAcquires) {}
00055 bool preAcquires() const { return acquires; }
00056 virtual bool deliver(QueuedMessage& msg) = 0;
00057 virtual void notify() = 0;
00058 virtual bool filter(boost::intrusive_ptr<Message>) { return true; }
00059 virtual bool accept(boost::intrusive_ptr<Message>) { return true; }
00060 virtual OwnershipToken* getSession() = 0;
00061 virtual ~Consumer(){}
00062 };
00063 }
00064 }
00065
00066
00067 #endif