server.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_SERVER_HPP_INCLUDED__
4 #define __ZMQ_SERVER_HPP_INCLUDED__
5 
6 #include <map>
7 
8 #include "socket_base.hpp"
9 #include "session_base.hpp"
10 #include "stdint.hpp"
11 #include "blob.hpp"
12 #include "fq.hpp"
13 
14 namespace zmq
15 {
16 class ctx_t;
17 class msg_t;
18 class pipe_t;
19 
20 // TODO: This class uses O(n) scheduling. Rewrite it to use O(1) algorithm.
21 class server_t : public socket_base_t
22 {
23  public:
24  server_t (zmq::ctx_t *parent_, uint32_t tid_, int sid_);
25  ~server_t ();
26 
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  int xrecv (zmq::msg_t *msg_);
33  bool xhas_in ();
34  bool xhas_out ();
35  void xread_activated (zmq::pipe_t *pipe_);
36  void xwrite_activated (zmq::pipe_t *pipe_);
37  void xpipe_terminated (zmq::pipe_t *pipe_);
38 
39  private:
40  // Fair queueing object for inbound pipes.
42 
43  struct outpipe_t
44  {
45  zmq::pipe_t *pipe;
46  bool active;
47  };
48 
49  // Outbound pipes indexed by the peer IDs.
50  typedef std::map<uint32_t, outpipe_t> out_pipes_t;
52 
53  // Routing IDs are generated. It's a simple increment and wrap-over
54  // algorithm. This value is the next ID to use (if not used already).
55  uint32_t _next_routing_id;
56 
58 };
59 }
60 
61 #endif
zmq::server_t::server_t
server_t(zmq::ctx_t *parent_, uint32_t tid_, int sid_)
Definition: server.cpp:12
zmq::server_t::outpipe_t::pipe
zmq::pipe_t * pipe
Definition: server.hpp:45
zmq::server_t::~server_t
~server_t()
Definition: server.cpp:21
zmq::server_t
Definition: server.hpp:21
zmq::server_t::xattach_pipe
void xattach_pipe(zmq::pipe_t *pipe_, bool subscribe_to_all_, bool locally_initiated_)
Definition: server.cpp:26
zmq::server_t::_out_pipes
out_pipes_t _out_pipes
Definition: server.hpp:51
zmq::server_t::xread_activated
void xread_activated(zmq::pipe_t *pipe_)
Definition: server.cpp:58
zmq::server_t::out_pipes_t
std::map< uint32_t, outpipe_t > out_pipes_t
Definition: server.hpp:50
zmq::socket_base_t
Definition: socket_base.hpp:31
zmq::server_t::xrecv
int xrecv(zmq::msg_t *msg_)
Definition: server.cpp:117
zmq::server_t::outpipe_t
Definition: server.hpp:43
zmq::fq_t
Definition: fq.hpp:18
zmq
Definition: zmq.hpp:229
stdint.hpp
zmq::server_t::xhas_in
bool xhas_in()
Definition: server.cpp:146
zmq::server_t::outpipe_t::active
bool active
Definition: server.hpp:46
ZMQ_NON_COPYABLE_NOR_MOVABLE
#define ZMQ_NON_COPYABLE_NOR_MOVABLE(classname)
Definition: macros.hpp:58
zmq::server_t::xpipe_terminated
void xpipe_terminated(zmq::pipe_t *pipe_)
Definition: server.cpp:49
fq.hpp
zmq::server_t::xhas_out
bool xhas_out()
Definition: server.cpp:151
socket_base.hpp
zmq::server_t::xsend
int xsend(zmq::msg_t *msg_)
Definition: server.cpp:76
blob.hpp
zmq::server_t::_fq
fq_t _fq
Definition: server.hpp:41
session_base.hpp
zmq::server_t::xwrite_activated
void xwrite_activated(zmq::pipe_t *pipe_)
Definition: server.cpp:63
zmq::server_t::_next_routing_id
uint32_t _next_routing_id
Definition: server.hpp:55
zmq::msg_t
Definition: msg.hpp:33


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