dish.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_DISH_HPP_INCLUDED__
4 #define __ZMQ_DISH_HPP_INCLUDED__
5 
6 #include <string>
7 
8 #include "socket_base.hpp"
9 #include "session_base.hpp"
10 #include "dist.hpp"
11 #include "fq.hpp"
12 #include "msg.hpp"
13 
14 namespace zmq
15 {
16 class ctx_t;
17 class pipe_t;
18 class io_thread_t;
19 
20 class dish_t ZMQ_FINAL : public socket_base_t
21 {
22  public:
23  dish_t (zmq::ctx_t *parent_, uint32_t tid_, int sid_);
24  ~dish_t ();
25 
26  protected:
27  // Overrides of functions from socket_base_t.
28  void xattach_pipe (zmq::pipe_t *pipe_,
29  bool subscribe_to_all_,
30  bool locally_initiated_);
31  int xsend (zmq::msg_t *msg_);
32  bool xhas_out ();
33  int xrecv (zmq::msg_t *msg_);
34  bool xhas_in ();
35  void xread_activated (zmq::pipe_t *pipe_);
36  void xwrite_activated (zmq::pipe_t *pipe_);
37  void xhiccuped (pipe_t *pipe_);
38  void xpipe_terminated (zmq::pipe_t *pipe_);
39  int xjoin (const char *group_);
40  int xleave (const char *group_);
41 
42  private:
43  int xxrecv (zmq::msg_t *msg_);
44 
45  // Send subscriptions to a pipe
46  void send_subscriptions (pipe_t *pipe_);
47 
48  // Fair queueing object for inbound pipes.
49  fq_t _fq;
50 
51  // Object for distributing the subscriptions upstream.
53 
54  // The repository of subscriptions.
55  typedef std::set<std::string> subscriptions_t;
57 
58  // If true, 'message' contains a matching message to return on the
59  // next recv call.
62 
64 };
65 
66 class dish_session_t ZMQ_FINAL : public session_base_t
67 {
68  public:
69  dish_session_t (zmq::io_thread_t *io_thread_,
70  bool connect_,
71  zmq::socket_base_t *socket_,
72  const options_t &options_,
73  address_t *addr_);
74  ~dish_session_t ();
75 
76  // Overrides of the functions from session_base_t.
77  int push_msg (msg_t *msg_);
78  int pull_msg (msg_t *msg_);
79  void reset ();
80 
81  private:
82  enum
83  {
85  body
86  } _state;
87 
89 
90  ZMQ_NON_COPYABLE_NOR_MOVABLE (dish_session_t)
91 };
92 }
93 
94 #endif
zmq::ZMQ_FINAL
Definition: channel.hpp:17
zmq::session_base_t
Definition: session_base.hpp:21
zmq::options_t
Definition: options.hpp:34
dist.hpp
zmq::socket_base_t
Definition: socket_base.hpp:31
zmq::ZMQ_FINAL::subscriptions_t
std::set< std::string > subscriptions_t
Definition: dish.hpp:55
zmq
Definition: zmq.hpp:229
zmq::ZMQ_FINAL::_subscriptions
subscriptions_t _subscriptions
Definition: dish.hpp:56
ZMQ_NON_COPYABLE_NOR_MOVABLE
#define ZMQ_NON_COPYABLE_NOR_MOVABLE(classname)
Definition: macros.hpp:58
zmq::ZMQ_FINAL::_group_msg
msg_t _group_msg
Definition: dish.hpp:88
fq.hpp
msg.hpp
zmq::ZMQ_FINAL::_message
msg_t _message
Definition: dish.hpp:61
zmq::ZMQ_FINAL::_has_message
bool _has_message
Definition: dish.hpp:60
zmq::address_t
Definition: address.hpp:64
zmq::dist_t
Definition: dist.hpp:18
socket_base.hpp
zmq::ZMQ_FINAL::_dist
dist_t _dist
Definition: dish.hpp:52
session_base.hpp
ZMQ_FINAL
Definition: unittest_ip_resolver.cpp:26
zmq::msg_t
Definition: msg.hpp:33
options_
DebugStringOptions options_
Definition: src/google/protobuf/descriptor.cc:2410
zmq::ZMQ_FINAL::group
@ group
Definition: dish.hpp:84


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:50