00001 #ifndef QPID_CLIENT_SUBSCRIPTIONMANAGER_H
00002 #define QPID_CLIENT_SUBSCRIPTIONMANAGER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qpid/client/Session.h"
00026 #include "qpid/client/Subscription.h"
00027 #include "qpid/sys/Runnable.h"
00028 #include "qpid/sys/Thread.h"
00029 #include "qpid/client/ClientImportExport.h"
00030 #include "qpid/client/MessageListener.h"
00031 #include "qpid/client/LocalQueue.h"
00032 #include "qpid/client/Handle.h"
00033 #include <string>
00034
00035 namespace qpid {
00036 namespace client {
00037
00038 class SubscriptionManagerImpl;
00039
00097 class SubscriptionManager : public sys::Runnable, public Handle<SubscriptionManagerImpl>
00098 {
00099 public:
00101 QPID_CLIENT_EXTERN SubscriptionManager(const Session& session);
00102 QPID_CLIENT_EXTERN SubscriptionManager(const SubscriptionManager&);
00103 QPID_CLIENT_EXTERN ~SubscriptionManager();
00104 QPID_CLIENT_EXTERN SubscriptionManager& operator=(const SubscriptionManager&);
00105
00117 QPID_CLIENT_EXTERN Subscription subscribe(MessageListener& listener,
00118 const std::string& queue,
00119 const SubscriptionSettings& settings,
00120 const std::string& name=std::string());
00121
00132 QPID_CLIENT_EXTERN Subscription subscribe(LocalQueue& localQueue,
00133 const std::string& queue,
00134 const SubscriptionSettings& settings,
00135 const std::string& name=std::string());
00136
00148 QPID_CLIENT_EXTERN Subscription subscribe(MessageListener& listener,
00149 const std::string& queue,
00150 const std::string& name=std::string());
00151
00161 QPID_CLIENT_EXTERN Subscription subscribe(LocalQueue& localQueue,
00162 const std::string& queue,
00163 const std::string& name=std::string());
00164
00165
00171 QPID_CLIENT_EXTERN bool get(Message& result, const std::string& queue, sys::Duration timeout=0);
00172
00178 QPID_CLIENT_EXTERN Message get(const std::string& queue, sys::Duration timeout=sys::TIME_INFINITE);
00179
00183 QPID_CLIENT_EXTERN Subscription getSubscription(const std::string& name) const;
00184
00186 QPID_CLIENT_EXTERN void cancel(const std::string& name);
00187
00192 QPID_CLIENT_EXTERN void run();
00193
00198 QPID_CLIENT_EXTERN void start();
00199
00203 QPID_CLIENT_EXTERN void wait();
00204
00209 QPID_CLIENT_EXTERN void setAutoStop(bool set=true);
00210
00212 QPID_CLIENT_EXTERN void stop();
00213
00214 static const uint32_t UNLIMITED=0xFFFFFFFF;
00215
00217 QPID_CLIENT_EXTERN void setFlowControl(const std::string& name, const FlowControl& flow);
00218
00225 QPID_CLIENT_EXTERN void setFlowControl(const std::string& name, uint32_t messages, uint32_t bytes, bool window=true);
00226
00230 QPID_CLIENT_EXTERN void setDefaultSettings(const SubscriptionSettings& s);
00231
00235 QPID_CLIENT_EXTERN const SubscriptionSettings& getDefaultSettings() const;
00236
00240 QPID_CLIENT_EXTERN SubscriptionSettings& getDefaultSettings();
00241
00250 QPID_CLIENT_EXTERN void setFlowControl(uint32_t messages, uint32_t bytes, bool window=true);
00251
00256 QPID_CLIENT_EXTERN void setAcceptMode(AcceptMode mode);
00257
00261 QPID_CLIENT_EXTERN void setAcquireMode(AcquireMode mode);
00262
00263 QPID_CLIENT_EXTERN void registerFailoverHandler ( boost::function<void ()> fh );
00264
00265 QPID_CLIENT_EXTERN Session getSession() const;
00266
00267 SubscriptionManager(SubscriptionManagerImpl*);
00268
00269 private:
00270 typedef SubscriptionManagerImpl Impl;
00271 friend class PrivateImplRef<SubscriptionManager>;
00272 };
00273
00275 class AutoCancel {
00276 public:
00277 AutoCancel(SubscriptionManager& sm_, const std::string& tag_) : sm(sm_), tag(tag_) {}
00278 ~AutoCancel() { sm.cancel(tag); }
00279 private:
00280 SubscriptionManager& sm;
00281 std::string tag;
00282 };
00283
00284 }}
00285
00286 #endif