DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
ConfigClient.hpp
Go to the documentation of this file.
1
9#ifndef IOMANAGER_INCLUDE_IOMANAGER_CONFIGCLIENT_HPP_
10#define IOMANAGER_INCLUDE_IOMANAGER_CONFIGCLIENT_HPP_
11
14
15#include "nlohmann/json.hpp"
16
17#include <boost/asio/connect.hpp>
18#include <boost/asio/ip/basic_resolver.hpp>
19#include <boost/asio/ip/tcp.hpp>
20#include <boost/beast/core.hpp>
21#include <boost/beast/version.hpp>
22
23#include <string>
24#include <map>
25#include <vector>
26#include <mutex>
27#include <thread>
28
29namespace beast = boost::beast; // from <boost/beast.hpp>
30namespace net = boost::asio; // from <boost/asio.hpp>
31using namespace std::literals::chrono_literals;
32
33namespace dunedaq::iomanager {
35{
36public:
46 ConfigClient(const std::string& server, const std::string& port, const std::string& session_name, std::chrono::milliseconds publish_interval);
47
53
62 ConnectionResponse resolveConnection(const ConnectionRequest& query, std::string session = "");
63
70 void publish(ConnectionRegistration const& connection);
78 void publish(std::vector<ConnectionRegistration> const& connections);
82 void retract(const ConnectionId& connectionId);
83
90 void retract(const std::vector<ConnectionId>& connectionIds);
91
95 void retract();
96
97 bool is_connected() { return m_connected.load(); }
98
99 private:
100 void publish();
101 std::string m_session;
102 net::io_context m_ioContext;
103 net::ip::basic_resolver<net::ip::tcp>::results_type m_addr;
104
105 std::mutex m_mutex;
106 std::set<ConnectionRegistration> m_registered_connections;
107 std::thread m_thread;
109 std::atomic<bool> m_connected{ false };
110};
111} // namespace dunedaq::iomanager
112
113#endif // IOMANAGER_INCLUDE_IOMANAGER_CONFIGCLIENT_HPP_
net::ip::basic_resolver< net::ip::tcp >::results_type m_addr
std::set< ConnectionRegistration > m_registered_connections
ConnectionResponse resolveConnection(const ConnectionRequest &query, std::string session="")
ConfigClient(const std::string &server, const std::string &port, const std::string &session_name, std::chrono::milliseconds publish_interval)