From bcdf163fa89a5b99096426c5e02b008c5f6bb7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=2E=20Eduardo=20Montoya=20S=C3=A1nchez?= Date: Wed, 30 Jan 2013 15:22:54 +0100 Subject: [PATCH] work in progress... --- zmq.hpp | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/zmq.hpp b/zmq.hpp index 67656ae..5049f16 100644 --- a/zmq.hpp +++ b/zmq.hpp @@ -296,7 +296,7 @@ namespace zmq { public: - inline socket_t (context_t &context_, int type_) + inline socket_t (context_t &context_, int type_) : is_monitored(false) { ptr = zmq_socket (context_.ptr, type_); if (ptr == NULL) @@ -304,7 +304,7 @@ namespace zmq } #ifdef ZMQ_HAS_RVALUE_REFS - inline socket_t(socket_t&& rhs) : ptr(rhs.ptr) + inline socket_t(socket_t&& rhs) : ptr(rhs.ptr), is_monitored(false) { rhs.ptr = NULL; } @@ -350,17 +350,25 @@ namespace zmq if (rc != 0) throw error_t (); } + + inlinde void init_monitor(const char *addr_) + { + std::string myaddr = std::string(addr_); + std::string monaddr = "inproc://monitor/" + myaddr; + rc = zmq_socket_monitor (ptr, monaddr.c_str(), ZMQ_EVENT_ALL); + if (rc != 0) + throw error_t (); + } inline void bind (const char *addr_) { int rc = zmq_bind (ptr, addr_); if (rc != 0) throw error_t (); - myaddr = std::string(addr_); - monaddr = "inproc://monitor/" + myaddr; - rc = zmq_socket_monitor (ptr, monaddr.c_str(), ZMQ_EVENT_ALL); - if (rc != 0) - throw error_t (); + if (is_monitored) + { + init_monitor() + } } inline void connect (const char *addr_) @@ -368,11 +376,10 @@ namespace zmq int rc = zmq_connect (ptr, addr_); if (rc != 0) throw error_t (); - myaddr = std::string(addr_); - monaddr = "inproc://monitor/" + myaddr; - rc = zmq_socket_monitor (ptr, monaddr.c_str(), ZMQ_EVENT_ALL); - if (rc != 0) - throw error_t (); + if (is_monitored) + { + init_monitor() + } } inline bool connected() @@ -404,7 +411,7 @@ namespace zmq switch (event.event) { case ZMQ_EVENT_CONNECTED: - mon->on_event_connected(); + mon->on_event_connected(event.connected.addr); break; case ZMQ_EVENT_CONNECT_DELAYED: mon->on_event_connect_delayed(); @@ -483,9 +490,14 @@ namespace zmq return false; throw error_t (); } + + inline void enable_monitoring() + { + is_monitored = true; + } private: - + bool is_monitored; void *ptr; monitor_t *mon; std::string monaddr;