DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
NetworkManager.hpp
Go to the documentation of this file.
1
10#ifndef IOMANAGER_INCLUDE_IOMANAGER_NETWORKMANAGER_HPP_
11#define IOMANAGER_INCLUDE_IOMANAGER_NETWORKMANAGER_HPP_
12
15
16#include "ipm/Receiver.hpp"
17#include "ipm/Sender.hpp"
18#include "ipm/Subscriber.hpp"
20
23
24#include <atomic>
25#include <chrono>
26#include <functional>
27#include <memory>
28#include <mutex>
29#include <string>
30#include <thread>
31#include <unordered_map>
32#include <utility>
33#include <vector>
34
35namespace dunedaq::iomanager {
36
38{
39
40public:
41 static NetworkManager& get();
43
44 void configure (const std::string& session_name,const std::vector<const confmodel::NetworkConnection*>& connections,
45 const confmodel::ConnectivityService* conn_svc,
47 void reset();
48 void shutdown();
49
50 std::shared_ptr<ipm::Receiver> get_receiver(ConnectionId const& conn_id);
51 std::shared_ptr<ipm::Sender> get_sender(ConnectionId const& conn_id);
52
53 void remove_sender(ConnectionId const& conn_id);
54
55 bool is_pubsub_connection(ConnectionId const& conn_id) const;
56
57 ConnectionResponse get_connections(ConnectionId const& conn_id, bool restrict_single = false) const;
59
60 std::set<std::string> get_datatypes(std::string const& uid) const;
61
62private:
63 static std::unique_ptr<NetworkManager> s_instance;
64
65 NetworkManager() = default;
66
71
72 std::shared_ptr<ipm::Receiver> create_receiver(std::vector<ConnectionInfo> connections, ConnectionId const& conn_id);
73 std::shared_ptr<ipm::Sender> create_sender(ConnectionInfo connection);
74
75 std::vector<std::string> get_pubsub_connection_strings(std::vector<ConnectionInfo> const& connections);
76 void update_subscribers();
77
78 std::unordered_map<ConnectionId, const confmodel::NetworkConnection*> m_preconfigured_connections;
79 std::unordered_map<ConnectionId, std::shared_ptr<ipm::Receiver>> m_receiver_plugins;
80 std::unordered_map<ConnectionId, std::shared_ptr<ipm::Sender>> m_sender_plugins;
81 std::shared_ptr<dunedaq::opmonlib::OpMonLink> m_sender_opmon_link{ std::make_shared<dunedaq::opmonlib::OpMonLink>() };
82 std::shared_ptr<dunedaq::opmonlib::OpMonLink> m_receiver_opmon_link{
83 std::make_shared<dunedaq::opmonlib::OpMonLink>()
84 };
85 static void register_monitorable_node(std::shared_ptr<opmonlib::MonitorableObject> conn,
86 std::shared_ptr<opmonlib::OpMonLink> link,
87 const std::string& name,
88 bool is_pubsub);
89
90 std::unordered_map<ConnectionId, std::shared_ptr<ipm::Subscriber>> m_subscriber_plugins;
91 std::unique_ptr<std::thread> m_subscriber_update_thread;
92 std::atomic<bool> m_subscriber_update_thread_running{ false };
93
94 std::unique_ptr<ConfigClient> m_config_client;
95 std::chrono::milliseconds m_config_client_interval{1000};
96
97 mutable std::mutex m_receiver_plugin_map_mutex;
98 mutable std::mutex m_sender_plugin_map_mutex;
100};
101} // namespace dunedaq::iomanager
102
103#endif // IOMANAGER_INCLUDE_IOMANAGER_NETWORKMANAGER_HPP_
ConnectionResponse get_preconfigured_connections(ConnectionId const &conn_id) const
void configure(const std::string &session_name, const std::vector< const confmodel::NetworkConnection * > &connections, const confmodel::ConnectivityService *conn_svc, dunedaq::opmonlib::OpMonManager &)
std::atomic< bool > m_subscriber_update_thread_running
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Receiver > > m_receiver_plugins
std::shared_ptr< ipm::Receiver > create_receiver(std::vector< ConnectionInfo > connections, ConnectionId const &conn_id)
NetworkManager(NetworkManager const &)=delete
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Sender > > m_sender_plugins
std::unordered_map< ConnectionId, const confmodel::NetworkConnection * > m_preconfigured_connections
std::unique_ptr< std::thread > m_subscriber_update_thread
std::set< std::string > get_datatypes(std::string const &uid) const
static NetworkManager & get()
std::shared_ptr< dunedaq::opmonlib::OpMonLink > m_sender_opmon_link
std::shared_ptr< ipm::Sender > create_sender(ConnectionInfo connection)
std::shared_ptr< ipm::Sender > get_sender(ConnectionId const &conn_id)
std::unique_ptr< ConfigClient > m_config_client
static void register_monitorable_node(std::shared_ptr< opmonlib::MonitorableObject > conn, std::shared_ptr< opmonlib::OpMonLink > link, const std::string &name, bool is_pubsub)
NetworkManager(NetworkManager &&)=delete
NetworkManager & operator=(NetworkManager &&)=delete
ConnectionResponse get_connections(ConnectionId const &conn_id, bool restrict_single=false) const
bool is_pubsub_connection(ConnectionId const &conn_id) const
static std::unique_ptr< NetworkManager > s_instance
std::chrono::milliseconds m_config_client_interval
std::shared_ptr< ipm::Receiver > get_receiver(ConnectionId const &conn_id)
std::vector< std::string > get_pubsub_connection_strings(std::vector< ConnectionInfo > const &connections)
NetworkManager & operator=(NetworkManager const &)=delete
void remove_sender(ConnectionId const &conn_id)
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Subscriber > > m_subscriber_plugins
std::shared_ptr< dunedaq::opmonlib::OpMonLink > m_receiver_opmon_link