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
00031 namespace qpid {
00032 namespace broker {
00033
00034 struct QueuedMessage
00035 {
00036 boost::intrusive_ptr<Message> payload;
00037 framing::SequenceNumber position;
00038 Queue* queue;
00039
00040 QueuedMessage(Queue* q, boost::intrusive_ptr<Message> msg, framing::SequenceNumber sn) :
00041 payload(msg), position(sn), queue(q) {}
00042 QueuedMessage(Queue* q) : queue(q) {}
00043 };
00044
00045
00046 class Consumer {
00047 const bool acquires;
00048 public:
00049 typedef shared_ptr<Consumer> ptr;
00050
00051 framing::SequenceNumber position;
00052
00053 Consumer(bool preAcquires = true) : acquires(preAcquires) {}
00054 bool preAcquires() const { return acquires; }
00055 virtual bool deliver(QueuedMessage& msg) = 0;
00056 virtual void notify() = 0;
00057 virtual bool filter(boost::intrusive_ptr<Message>) { return true; }
00058 virtual bool accept(boost::intrusive_ptr<Message>) { return true; }
00059 virtual ~Consumer(){}
00060 };
00061 }
00062 }
00063
00064
00065 #endif