Repo-Init
 
Loading...
Searching...
No Matches
ZeroMQServer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "zeromq/ZeroMQ.hpp"
6
7#include <functional>
8
9using FPTR_MessageCallback = std::function<bool(const std::vector<zmq::message_t> &, std::vector<zmq::message_t> &)>;
10
11class ZeroMQServer : private ZeroMQ, private ZeroMQMonitor {
12 private:
13 // Flag to check if the server is running
14 std::shared_ptr<std::atomic_flag> _checkFlag;
15 // Statistics
16 std::unique_ptr<ZeroMQStats> _stats;
17 // Called after every message function(std::vector<zmq::message_t>) {}
19 // Thread for processing messages
20 std::unique_ptr<std::jthread> _serverThread;
21
23 void update();
24
26 void threadFunc(const std::stop_token &stopToken) noexcept;
27
28 public:
36 ZeroMQServer(const std::string &hostAddr, std::shared_ptr<std::atomic_flag> checkFlag,
37 const std::shared_ptr<prometheus::Registry> &reg = nullptr, const std::string &prependName = "");
38
40 ZeroMQServer(const ZeroMQServer & /*unused*/) = delete;
41
43 ZeroMQServer(ZeroMQServer && /*unused*/) = delete;
44
46 ZeroMQServer &operator=(ZeroMQServer /*unused*/) = delete;
47
49 ZeroMQServer &operator=(ZeroMQServer && /*unused*/) = delete;
50
56 bool initialise();
57
59 void shutdown();
60
64 ~ZeroMQServer() override { shutdown(); }
65
71
77};
78
86bool ZeroMQServerMessageCallback(const std::vector<zmq::message_t> &recvMsgs, std::vector<zmq::message_t> &replyMsgs);
std::function< bool(const std::vector< zmq::message_t > &, std::vector< zmq::message_t > &)> FPTR_MessageCallback
bool ZeroMQServerMessageCallback(const std::vector< zmq::message_t > &recvMsgs, std::vector< zmq::message_t > &replyMsgs)
ZeroMQMonitor()=default
Constructor.
ZeroMQServer & operator=(ZeroMQServer)=delete
Copy assignment operator.
void update()
Processes new messages.
std::unique_ptr< ZeroMQStats > _stats
void messageCallback(FPTR_MessageCallback func)
std::shared_ptr< std::atomic_flag > _checkFlag
ZeroMQServer(const ZeroMQServer &)=delete
Copy constructor.
void threadFunc(const std::stop_token &stopToken) noexcept
Main thread function.
FPTR_MessageCallback messageCallback() const
std::unique_ptr< std::jthread > _serverThread
ZeroMQServer(const std::string &hostAddr, std::shared_ptr< std::atomic_flag > checkFlag, const std::shared_ptr< prometheus::Registry > &reg=nullptr, const std::string &prependName="")
ZeroMQServer(ZeroMQServer &&)=delete
Move constructor.
FPTR_MessageCallback _m_messageCallback
void shutdown()
Closes the ZeroMQ Server.
ZeroMQServer & operator=(ZeroMQServer &&)=delete
Move assignment operator.
~ZeroMQServer() override
ZeroMQ(const zmq::socket_type &type, const std::string &addr, bool isBind)
Definition ZeroMQ.cpp:32