PROTON-1481: [C++ binding] Added simpler way to get work_queue from model objects
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/d1c91a42 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/d1c91a42 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/d1c91a42 Branch: refs/heads/master Commit: d1c91a42e59f618fccb6838ffd30372a179759e2 Parents: 45d5612 Author: Andrew Stitcher <[email protected]> Authored: Fri May 19 12:27:17 2017 -0400 Committer: Andrew Stitcher <[email protected]> Committed: Fri Jul 21 12:50:06 2017 -0400 ---------------------------------------------------------------------- examples/cpp/broker.cpp | 4 ++-- examples/cpp/scheduled_send.cpp | 12 ++++++++---- examples/cpp/scheduled_send_03.cpp | 2 +- proton-c/bindings/cpp/include/proton/connection.hpp | 3 +++ proton-c/bindings/cpp/include/proton/link.hpp | 3 +++ proton-c/bindings/cpp/include/proton/session.hpp | 3 +++ proton-c/bindings/cpp/include/proton/transfer.hpp | 3 +++ proton-c/bindings/cpp/src/connection.cpp | 4 ++++ proton-c/bindings/cpp/src/link.cpp | 4 ++++ proton-c/bindings/cpp/src/session.cpp | 4 ++++ proton-c/bindings/cpp/src/transfer.cpp | 2 ++ 11 files changed, 37 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/examples/cpp/broker.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/broker.cpp b/examples/cpp/broker.cpp index 8c2d2ff..d39314c 100644 --- a/examples/cpp/broker.cpp +++ b/examples/cpp/broker.cpp @@ -182,7 +182,7 @@ class Sender : public proton::messaging_handler { public: Sender(proton::sender s, senders& ss) : - sender_(s), senders_(ss), work_queue_(make_thread_safe(s).get()->work_queue()), queue_(0), pending_credit_(0) + sender_(s), senders_(ss), work_queue_(s.work_queue()), queue_(0), pending_credit_(0) {} void add(proton::void_function0& f) { @@ -330,7 +330,7 @@ class Receiver : public proton::messaging_handler { public: Receiver(proton::receiver r) : - receiver_(r), work_queue_(make_thread_safe(r).get()->work_queue()), queue_(0) + receiver_(r), work_queue_(r.work_queue()), queue_(0) {} void add(proton::void_function0& f) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/examples/cpp/scheduled_send.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/scheduled_send.cpp b/examples/cpp/scheduled_send.cpp index bbef15b..2914c44 100644 --- a/examples/cpp/scheduled_send.cpp +++ b/examples/cpp/scheduled_send.cpp @@ -56,12 +56,16 @@ class scheduled_sender : public proton::messaging_handler { // The awkward looking double lambda is necessary because the scheduled lambdas run in the container context // and must arrange lambdas for send and close to happen in the connection context. void on_container_start(proton::container &c) OVERRIDE { - sender = c.open_sender(url); - work_queue = &proton::make_thread_safe(sender).get()->work_queue(); + c.open_sender(url); + } + + void on_sender_open(proton::sender &s) OVERRIDE { + sender = s; + work_queue = &s.work_queue(); // Call this->cancel after timeout. - c.schedule(timeout, [this]() { this->work_queue->add( [this]() { this->cancel(); }); }); + s.container().schedule(timeout, [this]() { this->work_queue->add( [this]() { this->cancel(); }); }); // Start regular ticks every interval. - c.schedule(interval, [this]() { this->work_queue->add( [this]() { this->tick(); }); }); + s.container().schedule(interval, [this]() { this->work_queue->add( [this]() { this->tick(); }); }); } void cancel() { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/examples/cpp/scheduled_send_03.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/scheduled_send_03.cpp b/examples/cpp/scheduled_send_03.cpp index 4b1b626..c3c63c8 100644 --- a/examples/cpp/scheduled_send_03.cpp +++ b/examples/cpp/scheduled_send_03.cpp @@ -96,7 +96,7 @@ class scheduled_sender : public proton::messaging_handler { } void on_sender_open(proton::sender & s) OVERRIDE { - work_queue = &proton::make_thread_safe(s).get()->work_queue(); + work_queue = &s.work_queue(); do_cancel = cancel_fn(*this, s); do_tick = tick_fn(*this, s); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/include/proton/connection.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/connection.hpp b/proton-c/bindings/cpp/include/proton/connection.hpp index 331ba82..ef75a4e 100644 --- a/proton-c/bindings/cpp/include/proton/connection.hpp +++ b/proton-c/bindings/cpp/include/proton/connection.hpp @@ -59,6 +59,9 @@ PN_CPP_CLASS_EXTERN connection : public internal::object<pn_connection_t>, publi /// container PN_CPP_EXTERN class container &container() const; + /// Get the work_queue for the connection. + PN_CPP_EXTERN class work_queue& work_queue() const; + /// Get the transport for the connection. PN_CPP_EXTERN class transport transport() const; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/include/proton/link.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/link.hpp b/proton-c/bindings/cpp/include/proton/link.hpp index 8534f21..8627ec9 100644 --- a/proton-c/bindings/cpp/include/proton/link.hpp +++ b/proton-c/bindings/cpp/include/proton/link.hpp @@ -78,6 +78,9 @@ PN_CPP_CLASS_EXTERN link : public internal::object<pn_link_t> , public endpoint /// The container for this link. PN_CPP_EXTERN class container &container() const; + /// Get the work_queue for the link. + PN_CPP_EXTERN class work_queue& work_queue() const; + /// The connection that owns this link. PN_CPP_EXTERN class connection connection() const; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/include/proton/session.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/session.hpp b/proton-c/bindings/cpp/include/proton/session.hpp index cbdf1b9..8d4184b 100644 --- a/proton-c/bindings/cpp/include/proton/session.hpp +++ b/proton-c/bindings/cpp/include/proton/session.hpp @@ -66,6 +66,9 @@ PN_CPP_CLASS_EXTERN session : public internal::object<pn_session_t>, public endp /// Get the container for this session. PN_CPP_EXTERN class container &container() const; + /// Get the work_queue for the session. + PN_CPP_EXTERN class work_queue& work_queue() const; + /// Get the connection this session belongs to. PN_CPP_EXTERN class connection connection() const; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/include/proton/transfer.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/transfer.hpp b/proton-c/bindings/cpp/include/proton/transfer.hpp index ea073f6..80b0860 100644 --- a/proton-c/bindings/cpp/include/proton/transfer.hpp +++ b/proton-c/bindings/cpp/include/proton/transfer.hpp @@ -61,6 +61,9 @@ class transfer : public internal::object<pn_delivery_t> { /// Return the connection for this transfer. PN_CPP_EXTERN class connection connection() const; + /// Get the work_queue for the transfer. + PN_CPP_EXTERN class work_queue& work_queue() const; + /// Return the container for this transfer. PN_CPP_EXTERN class container &container() const; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/src/connection.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/connection.cpp b/proton-c/bindings/cpp/src/connection.cpp index 5432a42..a37d3b5 100644 --- a/proton-c/bindings/cpp/src/connection.cpp +++ b/proton-c/bindings/cpp/src/connection.cpp @@ -76,6 +76,10 @@ container& connection::container() const { return *c; } +work_queue& connection::work_queue() const { + return connection_context::get(pn_object()).work_queue_; +} + session_range connection::sessions() const { return session_range(session_iterator(make_wrapper(pn_session_head(pn_object(), 0)))); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/src/link.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/link.cpp b/proton-c/bindings/cpp/src/link.cpp index eb4ccb1..1cb87ba 100644 --- a/proton-c/bindings/cpp/src/link.cpp +++ b/proton-c/bindings/cpp/src/link.cpp @@ -70,6 +70,10 @@ container& link::container() const { return connection().container(); } +work_queue& link::work_queue() const { + return connection().work_queue(); +} + class connection link::connection() const { return make_wrapper(pn_session_connection(pn_link_session(pn_object()))); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/src/session.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/session.cpp b/proton-c/bindings/cpp/src/session.cpp index a2b318e..4c3932b 100644 --- a/proton-c/bindings/cpp/src/session.cpp +++ b/proton-c/bindings/cpp/src/session.cpp @@ -54,6 +54,10 @@ container& session::container() const { return connection().container(); } +work_queue& session::work_queue() const { + return connection().work_queue(); +} + connection session::connection() const { return make_wrapper(pn_session_connection(pn_object())); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d1c91a42/proton-c/bindings/cpp/src/transfer.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/transfer.cpp b/proton-c/bindings/cpp/src/transfer.cpp index 78b6c0e..8066dd5 100644 --- a/proton-c/bindings/cpp/src/transfer.cpp +++ b/proton-c/bindings/cpp/src/transfer.cpp @@ -36,6 +36,8 @@ namespace proton { session transfer::session() const { return make_wrapper(pn_link_session(pn_delivery_link(pn_object()))); } connection transfer::connection() const { return make_wrapper(pn_session_connection(pn_link_session(pn_delivery_link(pn_object())))); } container& transfer::container() const { return connection().container(); } +work_queue& transfer::work_queue() const { return connection().work_queue(); } + bool transfer::settled() const { return pn_delivery_settled(pn_object()); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
