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_NETWORK_CONFIGCLIENT_HPP_
10#define IOMANAGER_INCLUDE_IOMANAGER_NETWORK_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 <map>
24#include <mutex>
25#include <set>
26#include <string>
27#include <thread>
28#include <vector>
29
30namespace beast = boost::beast; // from <boost/beast.hpp>
31namespace net = boost::asio; // from <boost/asio.hpp>
32
33namespace dunedaq::iomanager {
35{
36public:
46 ConfigClient(const std::string& server,
47 const std::string& port,
48 const std::string& session_name,
49 std::chrono::milliseconds publish_interval);
50
56
65 ConnectionResponse resolve_connection(const ConnectionRequest& query, std::string session = "");
66
67 void publish(ConnectionRegistration const& connection);
68
69 void publish(std::vector<ConnectionRegistration> const& connections);
70
71 void retract(const ConnectionId& connectionId);
72
79 void retract(const std::vector<ConnectionId>& connectionIds);
80
84 void retract();
85
86 bool is_connected() { return m_connected.load(); }
87
88private:
89 void publish();
90 std::string m_session;
91 net::io_context m_io_context;
92 net::ip::basic_resolver<net::ip::tcp>::results_type m_addr;
93
94 std::mutex m_mutex;
95 std::set<ConnectionRegistration> m_registered_connections;
96 std::thread m_thread;
98 std::atomic<bool> m_connected{ false };
99};
100} // namespace dunedaq::iomanager
101
102#endif // IOMANAGER_INCLUDE_IOMANAGER_NETWORK_CONFIGCLIENT_HPP_
ConnectionResponse resolve_connection(const ConnectionRequest &query, std::string session="")
net::ip::basic_resolver< net::ip::tcp >::results_type m_addr
std::set< ConnectionRegistration > m_registered_connections
ConfigClient(const std::string &server, const std::string &port, const std::string &session_name, std::chrono::milliseconds publish_interval)