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 <atomic>
22#include <memory>
23#include <string>
24#include <thread>
25
26#include "rogue/Logging.h"
27
28#ifndef NO_PYTHON
29 #include <boost/python.hpp>
30#endif
31
32namespace rogue {
33namespace interfaces {
34
48class ZmqServer {
49 void* zmqCtx_ = nullptr;
50 void* zmqPub_ = nullptr;
51 void* zmqRep_ = nullptr;
52 void* zmqStr_ = nullptr;
53
55 protected:
56 std::thread* rThread_ = nullptr;
57 std::thread* sThread_ = nullptr;
58 std::atomic<bool> threadEn_{false};
60
61 private:
62 // Bind address and base port configuration.
63 std::string addr_;
64 uint16_t basePort_;
65
66 // Logger instance.
67 std::shared_ptr<rogue::Logging> log_;
68
69 void runThread();
70 void strThread();
71
72 bool tryConnect();
73
74 public:
89 static std::shared_ptr<rogue::interfaces::ZmqServer> create(const std::string& addr, uint16_t port);
90
92 static void setup_python();
93
104 ZmqServer(const std::string& addr, uint16_t port);
105
107 virtual ~ZmqServer();
108
109#ifndef NO_PYTHON
114 void publish(boost::python::object data);
115
121 virtual boost::python::object doRequest(boost::python::object data);
122#endif
123
129 virtual std::string doString(const std::string& data);
130
135 uint16_t port();
136
138 void stop();
139
141 void start();
142};
143typedef std::shared_ptr<rogue::interfaces::ZmqServer> ZmqServerPtr;
144
145#ifndef NO_PYTHON
146
150class ZmqServerWrap : public rogue::interfaces::ZmqServer, public boost::python::wrapper<rogue::interfaces::ZmqServer> {
151 public:
157 ZmqServerWrap(std::string addr, uint16_t port);
158
168 boost::python::object doRequest(boost::python::object data);
169
178 boost::python::object defDoRequest(boost::python::object data);
179
189 std::string doString(const std::string& data);
190
199 std::string defDoString(const std::string& data);
200};
201
202typedef std::shared_ptr<rogue::interfaces::ZmqServerWrap> ZmqServerWrapPtr;
203#endif
204} // namespace interfaces
205} // namespace rogue
206
207#endif
Python-overridable wrapper for ZmqServer.
Definition ZmqServer.h:150
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:48
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:76
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:202
std::shared_ptr< rogue::interfaces::ZmqServer > ZmqServerPtr
Definition ZmqServer.h:143