00001 #ifndef PROTON_RECEIVER_HPP
00002 #define PROTON_RECEIVER_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./internal/export.hpp"
00026 #include "./endpoint.hpp"
00027 #include "./link.hpp"
00028
00029 #include <proton/types.h>
00030
00031 #include <string>
00032
00033 struct pn_connection_t;
00034
00035 namespace proton {
00036 template <class T> class thread_safe;
00037
00039 class
00040 PN_CPP_CLASS_EXTERN receiver : public link {
00042 PN_CPP_EXTERN receiver(pn_link_t* r);
00044
00045 public:
00047 receiver() {}
00048
00052 PN_CPP_EXTERN void open();
00053
00055 PN_CPP_EXTERN void open(const receiver_options &opts);
00056
00058 PN_CPP_EXTERN class source source() const;
00059
00061 PN_CPP_EXTERN class target target() const;
00062
00066 PN_CPP_EXTERN void add_credit(uint32_t);
00067
00076 PN_CPP_EXTERN void drain();
00077
00079 friend class internal::factory<receiver>;
00080 friend class receiver_iterator;
00081 friend class thread_safe<receiver>;
00083 };
00084
00086
00088 class receiver_iterator : public internal::iter_base<receiver, receiver_iterator> {
00089 explicit receiver_iterator(receiver r, pn_session_t* s = 0) :
00090 internal::iter_base<receiver, receiver_iterator>(r), session_(s) {}
00091
00092 public:
00094 explicit receiver_iterator() :
00095 internal::iter_base<receiver, receiver_iterator>(0), session_(0) {}
00096
00098 PN_CPP_EXTERN receiver_iterator operator++();
00099
00100 private:
00101 pn_session_t* session_;
00102
00103 friend class connection;
00104 friend class session;
00105 };
00106
00108 typedef internal::iter_range<receiver_iterator> receiver_range;
00109
00111
00112 }
00113
00114 #endif // PROTON_RECEIVER_HPP