From 311fb0d852374e769d8ff791c9df38f0464960c6 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Sat, 28 May 2011 09:02:21 +0200 Subject: Subscription matching moved from XSUB to SUB socket This patch will prevent duplicate matching in devices in the future. Instead of matching in both XPUB and XSUB, it'll happen only in XPUB. Receiver endpoint will still filter messages via SUB socket. Signed-off-by: Martin Sustrik --- src/sub.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/sub.hpp') diff --git a/src/sub.hpp b/src/sub.hpp index 8ba8987..91a5b65 100644 --- a/src/sub.hpp +++ b/src/sub.hpp @@ -22,6 +22,8 @@ #define __ZMQ_SUB_HPP_INCLUDED__ #include "xsub.hpp" +#include "trie.hpp" +#include "msg.hpp" namespace zmq { @@ -38,9 +40,26 @@ namespace zmq int xsetsockopt (int option_, const void *optval_, size_t optvallen_); int xsend (class msg_t *msg_, int options_); bool xhas_out (); + int xrecv (class msg_t *msg_, int flags_); + bool xhas_in (); private: + // Check whether the message matches at least one subscription. + bool match (class msg_t *msg_); + + // The repository of subscriptions. + trie_t subscriptions; + + // If true, 'message' contains a matching message to return on the + // next recv call. + bool has_message; + msg_t message; + + // If true, part of a multipart message was already received, but + // there are following parts still waiting. + bool more; + sub_t (const sub_t&); const sub_t &operator = (const sub_t&); }; -- cgit v1.2.3