rogue
Loading...
Searching...
No Matches
ZmqServer.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_ZMQ_SERVER_H__
18#define __ROGUE_ZMQ_SERVER_H__
19#include "rogue/Directives.h"
20
21#include <memory>
22#include <string>
23#include <thread>
24
25#include "rogue/Logging.h"
26
27#ifndef NO_PYTHON
28 #include <boost/python.hpp>
29#endif
30
31namespace rogue {
32namespace interfaces {
33
47class ZmqServer {
48 // ZeroMQ context.
49 void* zmqCtx_;
50
51 // ZeroMQ publish socket.
52 void* zmqPub_;
53
54 // ZeroMQ binary response socket.
55 void* zmqRep_;
56
57 // ZeroMQ string response socket.
58 void* zmqStr_;
59
60 // Request worker threads.
61 std::thread* rThread_;
62 std::thread* sThread_;
63 bool threadEn_;
64
65 // Bind address and base port configuration.
66 std::string addr_;
67 uint16_t basePort_;
68
69 // Logger instance.
70 std::shared_ptr<rogue::Logging> log_;
71
72 void runThread();
73 void strThread();
74
75 bool tryConnect();
76
77 public:
92 static std::shared_ptr<rogue::interfaces::ZmqServer> create(const std::string& addr, uint16_t port);
93
95 static void setup_python();
96
107 ZmqServer(const std::string& addr, uint16_t port);
108
110 virtual ~ZmqServer();
111
112#ifndef NO_PYTHON
117 void publish(boost::python::object data);
118
124 virtual boost::python::object doRequest(boost::python::object data);
125#endif
126
132 virtual std::string doString(const std::string& data);
133
138 uint16_t port();
139
141 void stop();
142
144 void start();
145};
146typedef std::shared_ptr<rogue::interfaces::ZmqServer> ZmqServerPtr;
147
148#ifndef NO_PYTHON
149
153class ZmqServerWrap : public rogue::interfaces::ZmqServer, public boost::python::wrapper<rogue::interfaces::ZmqServer> {
154 public:
160 ZmqServerWrap(std::string addr, uint16_t port);
161
171 boost::python::object doRequest(boost::python::object data);
172
181 boost::python::object defDoRequest(boost::python::object data);
182
192 std::string doString(const std::string& data);
193
202 std::string defDoString(const std::string& data);
203};
204
205typedef std::shared_ptr<rogue::interfaces::ZmqServerWrap> ZmqServerWrapPtr;
206#endif
207} // namespace interfaces
208} // namespace rogue
209
210#endif
Python-overridable wrapper for ZmqServer.
Definition ZmqServer.h:153
boost::python::object defDoRequest(boost::python::object data)
Calls base-class doRequest() implementation.
std::string defDoString(const std::string &data)
Calls base-class doString() implementation.
boost::python::object doRequest(boost::python::object data)
Processes a Python-object request message.
std::string doString(const std::string &data)
Processes a string request message.
ZeroMQ server for Rogue control, request/reply, and publish updates.
Definition ZmqServer.h:47
static void setup_python()
Registers Python bindings for this class.
Definition ZmqServer.cpp:43
uint16_t port()
Returns currently bound base port.
void start()
Starts server, binds sockets, and launches worker threads.
Definition ZmqServer.cpp:71
virtual ~ZmqServer()
Destroys server and stops worker threads/sockets.
Definition ZmqServer.cpp:67
void stop()
Stops server threads and closes sockets.
static std::shared_ptr< rogue::interfaces::ZmqServer > create(const std::string &addr, uint16_t port)
Creates a ZeroMQ server.
Definition ZmqServer.cpp:37
virtual boost::python::object doRequest(boost::python::object data)
Handles one binary request payload.
virtual std::string doString(const std::string &data)
Handles one string request payload.
void publish(boost::python::object data)
Publishes an update payload on the publish socket.
std::shared_ptr< rogue::interfaces::ZmqServerWrap > ZmqServerWrapPtr
Definition ZmqServer.h:205
std::shared_ptr< rogue::interfaces::ZmqServer > ZmqServerPtr
Definition ZmqServer.h:146