DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::iomanager::NetworkManager Class Reference

#include <NetworkManager.hpp>

Public Member Functions

 ~NetworkManager ()
 
void configure (const std::string &session_name, const std::vector< const confmodel::NetworkConnection * > &connections, const confmodel::ConnectivityService *conn_svc, dunedaq::opmonlib::OpMonManager &)
 
void reset ()
 
void shutdown ()
 
std::shared_ptr< ipm::Receiverget_receiver (ConnectionId const &conn_id)
 
std::shared_ptr< ipm::Senderget_sender (ConnectionId const &conn_id)
 
void remove_sender (ConnectionId const &conn_id)
 
bool is_pubsub_connection (ConnectionId const &conn_id) const
 
ConnectionResponse get_connections (ConnectionId const &conn_id, bool restrict_single=false) const
 
ConnectionResponse get_preconfigured_connections (ConnectionId const &conn_id) const
 
std::set< std::string > get_datatypes (std::string const &uid) const
 

Static Public Member Functions

static NetworkManagerget ()
 

Private Member Functions

 NetworkManager ()=default
 
 NetworkManager (NetworkManager const &)=delete
 
 NetworkManager (NetworkManager &&)=delete
 
NetworkManageroperator= (NetworkManager const &)=delete
 
NetworkManageroperator= (NetworkManager &&)=delete
 
std::shared_ptr< ipm::Receivercreate_receiver (std::vector< ConnectionInfo > connections, ConnectionId const &conn_id)
 
std::shared_ptr< ipm::Sendercreate_sender (ConnectionInfo connection)
 
std::vector< std::string > get_pubsub_connection_strings (std::vector< ConnectionInfo > const &connections)
 
void update_subscribers ()
 

Static Private Member Functions

static void register_monitorable_node (std::shared_ptr< opmonlib::MonitorableObject > conn, std::shared_ptr< opmonlib::OpMonLink > link, const std::string &name, bool is_pubsub)
 

Private Attributes

std::unordered_map< ConnectionId, const confmodel::NetworkConnection * > m_preconfigured_connections
 
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Receiver > > m_receiver_plugins
 
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Sender > > m_sender_plugins
 
std::shared_ptr< dunedaq::opmonlib::OpMonLinkm_sender_opmon_link { std::make_shared<dunedaq::opmonlib::OpMonLink>() }
 
std::shared_ptr< dunedaq::opmonlib::OpMonLinkm_receiver_opmon_link
 
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Subscriber > > m_subscriber_plugins
 
std::unique_ptr< std::thread > m_subscriber_update_thread
 
std::atomic< bool > m_subscriber_update_thread_running { false }
 
std::unique_ptr< ConfigClientm_config_client
 
std::chrono::milliseconds m_config_client_interval {1000}
 
std::mutex m_receiver_plugin_map_mutex
 
std::mutex m_sender_plugin_map_mutex
 
std::mutex m_subscriber_plugin_map_mutex
 

Static Private Attributes

static std::unique_ptr< NetworkManagers_instance = nullptr
 

Detailed Description

Definition at line 37 of file NetworkManager.hpp.

Constructor & Destructor Documentation

◆ ~NetworkManager()

dunedaq::iomanager::NetworkManager::~NetworkManager ( )
inline

Definition at line 42 of file NetworkManager.hpp.

◆ NetworkManager() [1/3]

dunedaq::iomanager::NetworkManager::NetworkManager ( )
privatedefault

◆ NetworkManager() [2/3]

dunedaq::iomanager::NetworkManager::NetworkManager ( NetworkManager const & )
privatedelete

◆ NetworkManager() [3/3]

dunedaq::iomanager::NetworkManager::NetworkManager ( NetworkManager && )
privatedelete

Member Function Documentation

◆ configure()

void dunedaq::iomanager::NetworkManager::configure ( const std::string & session_name,
const std::vector< const confmodel::NetworkConnection * > & connections,
const confmodel::ConnectivityService * conn_svc,
dunedaq::opmonlib::OpMonManager & opmgr )

Definition at line 40 of file NetworkManager.cpp.

44{
45 if (!m_preconfigured_connections.empty()) {
46 throw AlreadyConfigured(ERS_HERE);
47 }
48
49 for (auto& connection : connections) {
50 auto name = connection->UID();
51 TLOG_DEBUG(15) << "Adding connection " << name << " to connection map";
52 ConnectionId id(connection);
53 if (m_preconfigured_connections.count(id)) {
54 TLOG_DEBUG(15) << "Name collision for connection " << name << ", DT " << connection->get_data_type()
55 << " connection_map.count: " << m_preconfigured_connections.count(id);
56 reset();
57 throw NameCollision(ERS_HERE, connection->UID());
58 }
59 m_preconfigured_connections[id] = connection;
60 }
61
62 if (conn_svc != nullptr) {
63
64 auto service = conn_svc->get_service();
65
66 auto connectionServer = conn_svc->get_host();
67 auto connectionPort = service->get_port();
68 auto config_client_interval = std::chrono::milliseconds(conn_svc->get_interval_ms());
69
70 TLOG_DEBUG(17) << "ConnectionServer host and port are " << connectionServer << ":" << connectionPort;
71 if (m_config_client == nullptr) {
73 std::make_unique<ConfigClient>(connectionServer, std::to_string(connectionPort),session_name, config_client_interval);
74 }
75 m_config_client_interval = config_client_interval;
76 }
77
78 opmgr.register_node("senders", m_sender_opmon_link);
79 opmgr.register_node("receivers", m_receiver_opmon_link);
80}
#define ERS_HERE
std::unordered_map< ConnectionId, const confmodel::NetworkConnection * > m_preconfigured_connections
std::shared_ptr< dunedaq::opmonlib::OpMonLink > m_sender_opmon_link
std::unique_ptr< ConfigClient > m_config_client
std::chrono::milliseconds m_config_client_interval
std::shared_ptr< dunedaq::opmonlib::OpMonLink > m_receiver_opmon_link
void register_node(ElementId name, NewNodePtr)
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

◆ create_receiver()

std::shared_ptr< ipm::Receiver > dunedaq::iomanager::NetworkManager::create_receiver ( std::vector< ConnectionInfo > connections,
ConnectionId const & conn_id )
private

Definition at line 288 of file NetworkManager.cpp.

289{
290 TLOG_DEBUG(12) << "START";
291 if (connections.size() == 0) {
292 return nullptr;
293 }
294
295 bool is_pubsub = connections[0].connection_type == ConnectionType::kPubSub;
296 if (connections.size() > 1 && !is_pubsub) {
297 throw OperationFailed(ERS_HERE,
298 "Trying to configure a kSendRecv receiver with multiple Connections is not allowed!");
299 }
300
301 auto plugin_type =
303
304 TLOG_DEBUG(12) << "Creating plugin of type " << plugin_type;
305 auto plugin = dunedaq::ipm::make_ipm_receiver(plugin_type);
306
307 nlohmann::json config_json;
308 if (is_pubsub) {
309 std::vector<std::string> uris = get_pubsub_connection_strings(connections);
310 if (uris.size() == 0) {
311 return nullptr;
312 }
313 config_json["connection_strings"] = uris;
314 } else {
315 config_json["connection_string"] = connections[0].uri;
316 }
317 auto newCs = plugin->connect_for_receives(config_json);
318 TLOG_DEBUG(12) << "Receiver reports connected to URI " << newCs;
319
320 // Replace with resolved if there are wildcards (host and/or port)
321 if (connections[0].uri.find("*") != std::string::npos || connections[0].uri.find("0.0.0.0") != std::string::npos) {
322 TLOG_DEBUG(14) << "Wildcard found in connection URI " << connections[0].uri << ", adjusting before publish";
323 auto newUri = utilities::parse_connection_string(newCs);
324 auto oldUri = utilities::parse_connection_string(connections[0].uri);
325
326 if (oldUri.port == "*")
327 oldUri.port = newUri.port;
328 if (oldUri.host == "*" || oldUri.host == "0.0.0.0")
329 oldUri.host = newUri.host;
330
331 connections[0].uri = oldUri.to_string();
332 TLOG_DEBUG(14) << "Connection URI is now " << connections[0].uri;
333 }
334
335 if (is_pubsub) {
336 TLOG_DEBUG(12) << "Subscribing to topic " << connections[0].data_type << " after connect_for_receives";
337 auto subscriber = std::dynamic_pointer_cast<ipm::Subscriber>(plugin);
338 subscriber->subscribe(connections[0].data_type);
339 std::lock_guard<std::mutex> lkk(m_subscriber_plugin_map_mutex);
340 m_subscriber_plugins[conn_id] = subscriber;
344 }
345 }
346
347 if (m_config_client != nullptr && !is_pubsub) {
348 m_config_client->publish(connections[0]);
349 }
350
351 register_monitorable_node(plugin, m_receiver_opmon_link, conn_id.uid, is_pubsub);
352
353 TLOG_DEBUG(12) << "END";
354 return plugin;
355}
std::atomic< bool > m_subscriber_update_thread_running
std::unique_ptr< std::thread > m_subscriber_update_thread
static void register_monitorable_node(std::shared_ptr< opmonlib::MonitorableObject > conn, std::shared_ptr< opmonlib::OpMonLink > link, const std::string &name, bool is_pubsub)
std::vector< std::string > get_pubsub_connection_strings(std::vector< ConnectionInfo > const &connections)
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Subscriber > > m_subscriber_plugins
std::string get_recommended_plugin_name(IpmPluginType type)
std::shared_ptr< Receiver > make_ipm_receiver(std::string const &plugin_name)
Definition Receiver.hpp:124
ZmqUri parse_connection_string(std::string connection_string)
Definition Resolver.cpp:72
Unsupported std::string uri Execution of command std::string error Failed to create CommandFacility uri
Definition Issues.hpp:77

◆ create_sender()

std::shared_ptr< ipm::Sender > dunedaq::iomanager::NetworkManager::create_sender ( ConnectionInfo connection)
private

Definition at line 358 of file NetworkManager.cpp.

359{
360 auto is_pubsub = connection.connection_type == ConnectionType::kPubSub;
361 auto plugin_type =
363
364 // Check for case where both ends are in app and ConnectivityService hasn't received other end yet
365 if (!is_pubsub &&
366 (connection.uri.find("*") != std::string::npos || connection.uri.find("0.0.0.0") != std::string::npos)) {
367 return nullptr;
368 }
369
370 TLOG_DEBUG(11) << "Creating sender plugin of type " << plugin_type;
371 auto plugin = dunedaq::ipm::make_ipm_sender(plugin_type);
372 TLOG_DEBUG(11) << "Connecting sender plugin to " << connection.uri;
373 auto newCs = plugin->connect_for_sends({ { "connection_string", connection.uri } });
374 TLOG_DEBUG(11) << "Sender Plugin connected, reports URI " << newCs;
375
376 // Replace with resolved if there are wildcards (host and/or port)
377 if (connection.uri.find("*") != std::string::npos || connection.uri.find("0.0.0.0") != std::string::npos) {
378 TLOG_DEBUG(13) << "Wildcard found in connection URI " << connection.uri << ", adjusting before publish";
379 auto newUri = utilities::parse_connection_string(newCs);
380 auto oldUri = utilities::parse_connection_string(connection.uri);
381
382 if (oldUri.port == "*")
383 oldUri.port = newUri.port;
384 if (oldUri.host == "*" || oldUri.host == "0.0.0.0")
385 oldUri.host = newUri.host;
386
387 connection.uri = oldUri.to_string();
388 TLOG_DEBUG(13) << "Connection URI is now " << connection.uri;
389 }
390
391 if (m_config_client != nullptr && is_pubsub) {
392 m_config_client->publish(connection);
393 }
394
395 register_monitorable_node(plugin, m_sender_opmon_link, connection.uid, is_pubsub);
396
397 return plugin;
398}
std::shared_ptr< Sender > make_ipm_sender(std::string const &plugin_name)
Definition Sender.hpp:119

◆ get()

NetworkManager & dunedaq::iomanager::NetworkManager::get ( )
static

Definition at line 31 of file NetworkManager.cpp.

32{
33 if (!s_instance) {
34 s_instance.reset(new NetworkManager());
35 }
36 return *s_instance;
37}
static std::unique_ptr< NetworkManager > s_instance

◆ get_connections()

ConnectionResponse dunedaq::iomanager::NetworkManager::get_connections ( ConnectionId const & conn_id,
bool restrict_single = false ) const

Definition at line 211 of file NetworkManager.cpp.

212{
214 if (restrict_single && response.connections.size() > 1) {
215 throw NameCollision(ERS_HERE, conn_id.uid);
216 }
217 if (m_config_client != nullptr) {
218 auto start_time = std::chrono::steady_clock::now();
219 while (
220 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time).count() <
221 1000) {
222 try {
223 auto client_response = m_config_client->resolveConnection(conn_id, conn_id.session);
224 if (restrict_single && client_response.connections.size() > 1) {
225 throw NameCollision(ERS_HERE, conn_id.uid);
226 }
227
228 if (client_response.connections.size() > 0) {
229 response = client_response;
230 }
231 break;
232 } catch (FailedLookup const& lf) {
233 if (m_config_client->is_connected()) {
234 throw ConnectionNotFound(ERS_HERE, conn_id.uid, conn_id.data_type, lf);
235 }
236 usleep(1000);
237 }
238 }
239 }
240
241 if (response.connections.size() == 0) {
242 throw ConnectionNotFound(ERS_HERE, conn_id.uid, conn_id.data_type);
243 }
244
245 return response;
246}
ConnectionResponse get_preconfigured_connections(ConnectionId const &conn_id) const
Cannot add TPSet with start_time

◆ get_datatypes()

std::set< std::string > dunedaq::iomanager::NetworkManager::get_datatypes ( std::string const & uid) const

Definition at line 262 of file NetworkManager.cpp.

263{
264 std::set<std::string> output;
265 for (auto& conn : m_preconfigured_connections) {
266 if (conn.second->UID() == uid)
267 output.insert(conn.second->get_data_type());
268 }
269
270 return output;
271}

◆ get_preconfigured_connections()

ConnectionResponse dunedaq::iomanager::NetworkManager::get_preconfigured_connections ( ConnectionId const & conn_id) const

Definition at line 249 of file NetworkManager.cpp.

250{
251 ConnectionResponse matching_connections;
252 for (auto& conn : m_preconfigured_connections) {
253 if (is_match(conn_id, conn.first)) {
254 matching_connections.connections.push_back(conn.second);
255 }
256 }
257
258 return matching_connections;
259}
bool is_match(ConnectionId const &search, ConnectionId const &check)

◆ get_pubsub_connection_strings()

std::vector< std::string > dunedaq::iomanager::NetworkManager::get_pubsub_connection_strings ( std::vector< ConnectionInfo > const & connections)
private

Definition at line 274 of file NetworkManager.cpp.

275{
276 std::vector<std::string> uris;
277 for (auto& conn : connections) {
278 // Check for case where both ends are in app and ConnectivityService hasn't received other end yet, or ConnectivityService was no longer available
279 if (conn.uri.find("*") != std::string::npos || conn.uri.find("0.0.0.0") != std::string::npos) {
280 continue;
281 }
282 uris.push_back(conn.uri);
283 }
284 return uris;
285}

◆ get_receiver()

std::shared_ptr< ipm::Receiver > dunedaq::iomanager::NetworkManager::get_receiver ( ConnectionId const & conn_id)

Definition at line 150 of file NetworkManager.cpp.

151{
152 TLOG_DEBUG(9) << "Getting receiver for connection " << conn_id.uid;
153
154 std::lock_guard<std::mutex> lk(m_receiver_plugin_map_mutex);
155 if (!m_receiver_plugins.count(conn_id) || m_receiver_plugins.at(conn_id) == nullptr) {
156
157 auto response = get_connections(conn_id);
158
159 TLOG_DEBUG(9) << "Creating receiver for connection " << conn_id.uid;
160 auto receiver = create_receiver(response.connections, conn_id);
161
162 m_receiver_plugins[conn_id] = receiver;
163 }
164
165 return m_receiver_plugins[conn_id];
166}
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)
ConnectionResponse get_connections(ConnectionId const &conn_id, bool restrict_single=false) const

◆ get_sender()

std::shared_ptr< ipm::Sender > dunedaq::iomanager::NetworkManager::get_sender ( ConnectionId const & conn_id)

Definition at line 169 of file NetworkManager.cpp.

170{
171 TLOG_DEBUG(10) << "Getting sender for connection " << conn_id.uid;
172
173 std::lock_guard<std::mutex> lk(m_sender_plugin_map_mutex);
174
175 if (!m_sender_plugins.count(conn_id) || m_sender_plugins.at(conn_id) == nullptr) {
176 auto response = get_connections(conn_id, true);
177
178 TLOG_DEBUG(10) << "Creating sender for connection " << conn_id.uid;
179 auto sender = create_sender(response.connections[0]);
180 m_sender_plugins[conn_id] = sender;
181 }
182
183 if (m_sender_plugins.count(conn_id)) {
184 return m_sender_plugins[conn_id];
185 }
186
187 return nullptr;
188}
std::unordered_map< ConnectionId, std::shared_ptr< ipm::Sender > > m_sender_plugins
std::shared_ptr< ipm::Sender > create_sender(ConnectionInfo connection)

◆ is_pubsub_connection()

bool dunedaq::iomanager::NetworkManager::is_pubsub_connection ( ConnectionId const & conn_id) const

Definition at line 201 of file NetworkManager.cpp.

202{
203 auto response = get_connections(conn_id);
204 bool is_pubsub = response.connections[0].connection_type == ConnectionType::kPubSub;
205
206 // TLOG() << "Returning " << std::boolalpha << is_pubsub << " for request " << request;
207 return is_pubsub;
208}

◆ operator=() [1/2]

NetworkManager & dunedaq::iomanager::NetworkManager::operator= ( NetworkManager && )
privatedelete

◆ operator=() [2/2]

NetworkManager & dunedaq::iomanager::NetworkManager::operator= ( NetworkManager const & )
privatedelete

◆ register_monitorable_node()

void dunedaq::iomanager::NetworkManager::register_monitorable_node ( std::shared_ptr< opmonlib::MonitorableObject > conn,
std::shared_ptr< opmonlib::OpMonLink > link,
const std::string & name,
bool is_pubsub )
staticprivate

Definition at line 429 of file NetworkManager.cpp.

433{
434
435 try {
436 link->register_node(name, conn);
437 } catch (const opmonlib::NonUniqueNodeName& err) {
438 bool success = false;
439 size_t counter = 1;
440 do {
441 auto fname = fmt::format("{}--{}", name, counter);
442 try {
443 link->register_node(fname, conn);
444 success = true;
445 } catch (const opmonlib::NonUniqueNodeName& err) {
446 ++counter;
447 }
448 } while (!success);
449 }
450}

◆ remove_sender()

void dunedaq::iomanager::NetworkManager::remove_sender ( ConnectionId const & conn_id)

Definition at line 191 of file NetworkManager.cpp.

192{
193 TLOG_DEBUG(10) << "Removing sender for connection " << conn_id.uid;
194
195 std::lock_guard<std::mutex> lk(m_sender_plugin_map_mutex);
196 m_sender_plugins.erase(conn_id);
197}

◆ reset()

void dunedaq::iomanager::NetworkManager::reset ( )

Definition at line 83 of file NetworkManager.cpp.

84{
85 TLOG_DEBUG(5) << "reset() BEGIN";
89 }
90 {
91 std::lock_guard<std::mutex> lkk(m_subscriber_plugin_map_mutex);
93 }
94 {
95 std::lock_guard<std::mutex> lk(m_sender_plugin_map_mutex);
96 m_sender_plugins.clear();
97 }
98 {
99 std::lock_guard<std::mutex> lk(m_receiver_plugin_map_mutex);
100 m_receiver_plugins.clear();
101 }
102
104 if (m_config_client != nullptr) {
105 try {
106 m_config_client->retract();
107 } catch (FailedRetract const& r) {
108 ers::error(r);
109 }
110 }
111 m_config_client.reset(nullptr);
112
113 m_sender_opmon_link = std::make_shared<dunedaq::opmonlib::OpMonLink>();
114 m_receiver_opmon_link = std::make_shared<dunedaq::opmonlib::OpMonLink>();
115 TLOG_DEBUG(5) << "reset() END";
116}
void error(const Issue &issue)
Definition ers.hpp:81

◆ shutdown()

void dunedaq::iomanager::NetworkManager::shutdown ( )

Definition at line 119 of file NetworkManager.cpp.

120{
121 TLOG_DEBUG(5) << "shutdown() BEGIN";
125 }
126 {
127 std::lock_guard<std::mutex> lkk(m_subscriber_plugin_map_mutex);
128 m_subscriber_plugins.clear();
129 }
130 {
131 std::lock_guard<std::mutex> lk(m_sender_plugin_map_mutex);
132 m_sender_plugins.clear();
133 }
134 {
135 std::lock_guard<std::mutex> lk(m_receiver_plugin_map_mutex);
136 m_receiver_plugins.clear();
137 }
138
139 if (m_config_client != nullptr) {
140 try {
141 m_config_client->retract();
142 } catch (FailedRetract const& r) {
143 ers::error(r);
144 }
145 }
146 TLOG_DEBUG(5) << "shutdown() END";
147}

◆ update_subscribers()

void dunedaq::iomanager::NetworkManager::update_subscribers ( )
private

Definition at line 401 of file NetworkManager.cpp.

402{
404 {
405 TLOG_DEBUG(14) << "Updating registered subscribers";
406 std::lock_guard<std::mutex> lk(m_subscriber_plugin_map_mutex);
407 for (auto& subscriber_pair : m_subscriber_plugins) {
408 try {
409 auto response = get_connections(subscriber_pair.first, false);
410
411 nlohmann::json config_json;
412 std::vector<std::string> uris = get_pubsub_connection_strings(response.connections);
413 if (uris.size() == 0) {
414 TLOG_DEBUG(14) << "No valid connection strings found, is the Connectivity Service running?!";
415 continue;
416 }
417 config_json["connection_strings"] = uris;
418
419 subscriber_pair.second->connect_for_receives(config_json);
420 } catch (ers::Issue&) {
421 }
422 }
423 }
424 std::this_thread::sleep_for(m_config_client_interval);
425 }
426}
Base class for any user define issue.
Definition Issue.hpp:69

Member Data Documentation

◆ m_config_client

std::unique_ptr<ConfigClient> dunedaq::iomanager::NetworkManager::m_config_client
private

Definition at line 94 of file NetworkManager.hpp.

◆ m_config_client_interval

std::chrono::milliseconds dunedaq::iomanager::NetworkManager::m_config_client_interval {1000}
private

Definition at line 95 of file NetworkManager.hpp.

95{1000};

◆ m_preconfigured_connections

std::unordered_map<ConnectionId, const confmodel::NetworkConnection*> dunedaq::iomanager::NetworkManager::m_preconfigured_connections
private

Definition at line 78 of file NetworkManager.hpp.

◆ m_receiver_opmon_link

std::shared_ptr<dunedaq::opmonlib::OpMonLink> dunedaq::iomanager::NetworkManager::m_receiver_opmon_link
private
Initial value:
{
std::make_shared<dunedaq::opmonlib::OpMonLink>()
}

Definition at line 82 of file NetworkManager.hpp.

82 {
83 std::make_shared<dunedaq::opmonlib::OpMonLink>()
84 };

◆ m_receiver_plugin_map_mutex

std::mutex dunedaq::iomanager::NetworkManager::m_receiver_plugin_map_mutex
mutableprivate

Definition at line 97 of file NetworkManager.hpp.

◆ m_receiver_plugins

std::unordered_map<ConnectionId, std::shared_ptr<ipm::Receiver> > dunedaq::iomanager::NetworkManager::m_receiver_plugins
private

Definition at line 79 of file NetworkManager.hpp.

◆ m_sender_opmon_link

std::shared_ptr<dunedaq::opmonlib::OpMonLink> dunedaq::iomanager::NetworkManager::m_sender_opmon_link { std::make_shared<dunedaq::opmonlib::OpMonLink>() }
private

Definition at line 81 of file NetworkManager.hpp.

81{ std::make_shared<dunedaq::opmonlib::OpMonLink>() };

◆ m_sender_plugin_map_mutex

std::mutex dunedaq::iomanager::NetworkManager::m_sender_plugin_map_mutex
mutableprivate

Definition at line 98 of file NetworkManager.hpp.

◆ m_sender_plugins

std::unordered_map<ConnectionId, std::shared_ptr<ipm::Sender> > dunedaq::iomanager::NetworkManager::m_sender_plugins
private

Definition at line 80 of file NetworkManager.hpp.

◆ m_subscriber_plugin_map_mutex

std::mutex dunedaq::iomanager::NetworkManager::m_subscriber_plugin_map_mutex
mutableprivate

Definition at line 99 of file NetworkManager.hpp.

◆ m_subscriber_plugins

std::unordered_map<ConnectionId, std::shared_ptr<ipm::Subscriber> > dunedaq::iomanager::NetworkManager::m_subscriber_plugins
private

Definition at line 90 of file NetworkManager.hpp.

◆ m_subscriber_update_thread

std::unique_ptr<std::thread> dunedaq::iomanager::NetworkManager::m_subscriber_update_thread
private

Definition at line 91 of file NetworkManager.hpp.

◆ m_subscriber_update_thread_running

std::atomic<bool> dunedaq::iomanager::NetworkManager::m_subscriber_update_thread_running { false }
private

Definition at line 92 of file NetworkManager.hpp.

92{ false };

◆ s_instance

std::unique_ptr< NetworkManager > dunedaq::iomanager::NetworkManager::s_instance = nullptr
staticprivate

Definition at line 63 of file NetworkManager.hpp.


The documentation for this class was generated from the following files: