00001 #ifndef _client_MessageMessageChannel_h
00002 #define _client_MessageMessageChannel_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "MessageChannel.h"
00023 #include "IncomingMessage.h"
00024 #include "qpid/sys/Monitor.h"
00025 #include <boost/ptr_container/ptr_map.hpp>
00026
00027 namespace qpid {
00028 namespace client {
00033 class MessageMessageChannel : public MessageChannel
00034 {
00035 public:
00036 MessageMessageChannel(Channel& parent);
00037
00038 void consume(
00039 Queue& queue, std::string& tag, MessageListener* listener,
00040 AckMode ackMode = NO_ACK, bool noLocal = false, bool synch = true,
00041 const framing::FieldTable* fields = 0);
00042
00043 void cancel(const std::string& tag, bool synch = true);
00044
00045 bool get(Message& msg, const Queue& queue, AckMode ackMode = NO_ACK);
00046
00047 void publish(const Message& msg, const Exchange& exchange,
00048 const std::string& routingKey,
00049 bool mandatory = false, bool immediate = false);
00050
00051 void setReturnedMessageHandler(ReturnedMessageHandler* handler);
00052
00053 void run();
00054
00055 void handle(boost::shared_ptr<framing::AMQMethodBody>);
00056
00057 void handle(shared_ptr<framing::AMQHeaderBody>);
00058
00059 void handle(shared_ptr<framing::AMQContentBody>);
00060
00061 void setQos();
00062
00063 void close();
00064
00065 private:
00066 typedef boost::ptr_map<std::string, IncomingMessage::WaitableDestination>
00067 Destinations;
00068
00069 std::string newTag();
00070
00071 sys::Mutex lock;
00072 Channel& channel;
00073 IncomingMessage incoming;
00074 long tagCount;
00075 };
00076
00077 }}
00078
00079
00080
00081 #endif