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

#include <IOManager.hpp>

Public Member Functions

 IOManager (const IOManager &)=delete
 IOManager is not copy-constructible.
 
IOManageroperator= (const IOManager &)=delete
 IOManager is not copy-assignable.
 
 IOManager (IOManager &&)=delete
 IOManager is not move-constructible.
 
IOManageroperator= (IOManager &&)=delete
 IOManager is not move-assignable.
 
void configure (std::string session, std::vector< const confmodel::Queue * > queues, std::vector< const confmodel::NetworkConnection * > connections, const confmodel::ConnectivityService *connection_service, opmonlib::OpMonManager &)
 
void reset ()
 
void shutdown ()
 
template<typename Datatype >
std::shared_ptr< SenderConcept< Datatype > > get_sender (ConnectionId id)
 
template<typename Datatype >
std::shared_ptr< SenderConcept< Datatype > > get_sender (std::string const &uid)
 
template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver (ConnectionId id)
 
template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver (std::string const &uid)
 
template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver (std::string const &uid, std::string const &tag)
 
template<typename Datatype >
void add_callback (ConnectionId const &id, std::function< void(Datatype &)> callback)
 
template<typename Datatype >
void add_callback (std::string const &uid, std::function< void(Datatype &)> callback)
 
template<typename Datatype >
void add_callback (std::string const &uid, std::string const &tag, std::function< void(Datatype &)> callback)
 
template<typename Datatype >
void remove_callback (ConnectionId const &id)
 
template<typename Datatype >
void remove_callback (std::string const &uid)
 
template<typename Datatype >
void remove_callback (std::string const &uid, std::string const &tag)
 
std::set< std::string > get_datatypes (std::string const &uid)
 

Static Public Member Functions

static std::shared_ptr< IOManagerget ()
 

Private Types

using SenderMap = std::map<ConnectionId, std::shared_ptr<Sender>>
 
using ReceiverMap = std::map<ConnectionId, std::shared_ptr<Receiver>>
 

Private Member Functions

 IOManager ()
 

Private Attributes

SenderMap m_senders
 
ReceiverMap m_receivers
 
std::string m_session
 

Static Private Attributes

static std::shared_ptr< IOManagers_instance = nullptr
 

Detailed Description

Wrapper class for sockets and SPSC circular buffers. Makes the communication between DAQ processes easier and scalable.

Definition at line 36 of file IOManager.hpp.

Member Typedef Documentation

◆ ReceiverMap

using dunedaq::iomanager::IOManager::ReceiverMap = std::map<ConnectionId, std::shared_ptr<Receiver>>
private

Definition at line 99 of file IOManager.hpp.

◆ SenderMap

using dunedaq::iomanager::IOManager::SenderMap = std::map<ConnectionId, std::shared_ptr<Sender>>
private

Definition at line 98 of file IOManager.hpp.

Constructor & Destructor Documentation

◆ IOManager() [1/3]

dunedaq::iomanager::IOManager::IOManager ( const IOManager & )
delete

IOManager is not copy-constructible.

◆ IOManager() [2/3]

dunedaq::iomanager::IOManager::IOManager ( IOManager && )
delete

IOManager is not move-constructible.

◆ IOManager() [3/3]

dunedaq::iomanager::IOManager::IOManager ( )
inlineprivate

Definition at line 96 of file IOManager.hpp.

96{}

Member Function Documentation

◆ add_callback() [1/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::add_callback ( ConnectionId const & id,
std::function< void(Datatype &)> callback )
inline

Definition at line 24 of file IOManager.hxx.

25{
26 auto receiver = get_receiver<Datatype>(id);
27 receiver->add_callback(callback);
28}
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver(ConnectionId id)
Definition IOManager.hxx:56

◆ add_callback() [2/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::add_callback ( std::string const & uid,
std::function< void(Datatype &)> callback )
inline

Definition at line 124 of file IOManager.hxx.

125{
126 auto receiver = get_receiver<Datatype>(uid);
127 receiver->add_callback(callback);
128}

◆ add_callback() [3/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::add_callback ( std::string const & uid,
std::string const & tag,
std::function< void(Datatype &)> callback )
inline

Definition at line 132 of file IOManager.hxx.

133{
134 auto receiver = get_receiver<Datatype>(uid, tag);
135 receiver->add_callback(callback);
136}

◆ configure()

void dunedaq::iomanager::IOManager::configure ( std::string session,
std::vector< const confmodel::Queue * > queues,
std::vector< const confmodel::NetworkConnection * > connections,
const confmodel::ConnectivityService * connection_service,
opmonlib::OpMonManager & opmgr )

Definition at line 16 of file IOManager.cpp.

21{
23
24 QueueRegistry::get().configure(queues, opmgr);
25 NetworkManager::get().configure(session, connections, connection_service, opmgr);
26}
void configure(const std::string &session_name, const std::vector< const confmodel::NetworkConnection * > &connections, const confmodel::ConnectivityService *conn_svc, dunedaq::opmonlib::OpMonManager &)
static NetworkManager & get()
static QueueRegistry & get()
Get a handle to the QueueRegistry.
void configure(const std::vector< const confmodel::Queue * > &configs, opmonlib::OpMonManager &)
Configure the QueueRegistry.

◆ get()

static std::shared_ptr< IOManager > dunedaq::iomanager::IOManager::get ( )
inlinestatic

Definition at line 40 of file IOManager.hpp.

41 {
42 if (!s_instance)
43 s_instance = std::shared_ptr<IOManager>(new IOManager());
44
45 return s_instance;
46 }
static std::shared_ptr< IOManager > s_instance

◆ get_datatypes()

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

Definition at line 48 of file IOManager.cpp.

49{
50 auto output = QueueRegistry::get().get_datatypes(uid);
51 auto networks = NetworkManager::get().get_datatypes(uid);
52 for (auto& dt : networks) {
53 output.insert(dt);
54 }
55 return output;
56}
std::set< std::string > get_datatypes(std::string const &uid) const
std::set< std::string > get_datatypes(std::string const &uid) const

◆ get_receiver() [1/3]

template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > dunedaq::iomanager::IOManager::get_receiver ( ConnectionId id)
inline

Definition at line 56 of file IOManager.hxx.

57{
58 if (id.data_type != datatype_to_string<Datatype>()) {
59 throw DatatypeMismatch(ERS_HERE, id.uid, id.data_type, datatype_to_string<Datatype>());
60 }
61
62 if (id.session == "") {
63 id.session = m_session;
64 }
65
66 static std::mutex dt_receiver_mutex;
67 std::lock_guard<std::mutex> lk(dt_receiver_mutex);
68
69 if (!m_receivers.count(id)) {
70 if (QueueRegistry::get().has_queue(id.uid, id.data_type)) { // if queue
71 TLOG("IOManager") << "Creating QueueReceiverModel for uid " << id.uid << ", datatype " << id.data_type;
72 m_receivers[id] = std::make_shared<QueueReceiverModel<Datatype>>(id);
73 } else {
74 TLOG("IOManager") << "Creating NetworkReceiverModel for uid " << id.uid << ", datatype " << id.data_type
75 << " in session " << id.session;
76 m_receivers[id] = std::make_shared<NetworkReceiverModel<Datatype>>(id);
77 }
78 }
79 return std::dynamic_pointer_cast<ReceiverConcept<Datatype>>(m_receivers[id]); // NOLINT
80}
#define ERS_HERE
#define TLOG(...)
Definition macro.hpp:22
Unknown serialization Cannot deserialize std::string datatype_to_string()

◆ get_receiver() [2/3]

template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > dunedaq::iomanager::IOManager::get_receiver ( std::string const & uid)
inline

Definition at line 32 of file IOManager.hxx.

33{
34 auto data_type = datatype_to_string<Datatype>();
35 ConnectionId id;
36 id.uid = uid;
37 id.data_type = data_type;
38 id.session = m_session;
39 return get_receiver<Datatype>(id);
40}

◆ get_receiver() [3/3]

template<typename Datatype >
std::shared_ptr< ReceiverConcept< Datatype > > dunedaq::iomanager::IOManager::get_receiver ( std::string const & uid,
std::string const & tag )
inline

Definition at line 43 of file IOManager.hxx.

44{
45 auto data_type = datatype_to_string<Datatype>();
46 ConnectionId id;
47 id.uid = uid;
48 id.data_type = data_type;
49 id.session = m_session;
50 id.tag = tag;
51 return get_receiver<Datatype>(id);
52}

◆ get_sender() [1/2]

template<typename Datatype >
std::shared_ptr< SenderConcept< Datatype > > dunedaq::iomanager::IOManager::get_sender ( ConnectionId id)
inline

Definition at line 96 of file IOManager.hxx.

97{
98 if (id.data_type != datatype_to_string<Datatype>()) {
99 throw DatatypeMismatch(ERS_HERE, id.uid, id.data_type, datatype_to_string<Datatype>());
100 }
101
102 if (id.session == "") {
103 id.session = m_session;
104 }
105
106 static std::mutex dt_sender_mutex;
107 std::lock_guard<std::mutex> lk(dt_sender_mutex);
108
109 if (!m_senders.count(id)) {
110 if (QueueRegistry::get().has_queue(id.uid, id.data_type)) { // if queue
111 TLOG("IOManager") << "Creating QueueSenderModel for uid " << id.uid << ", datatype " << id.data_type;
112 m_senders[id] = std::make_shared<QueueSenderModel<Datatype>>(id);
113 } else {
114 TLOG("IOManager") << "Creating NetworkSenderModel for uid " << id.uid << ", datatype " << id.data_type
115 << " in session " << id.session;
116 m_senders[id] = std::make_shared<NetworkSenderModel<Datatype>>(id);
117 }
118 }
119 return std::dynamic_pointer_cast<SenderConcept<Datatype>>(m_senders[id]);
120}

◆ get_sender() [2/2]

template<typename Datatype >
std::shared_ptr< SenderConcept< Datatype > > dunedaq::iomanager::IOManager::get_sender ( std::string const & uid)
inline

Definition at line 84 of file IOManager.hxx.

85{
86 auto data_type = datatype_to_string<Datatype>();
87 ConnectionId id;
88 id.uid = uid;
89 id.data_type = data_type;
90 id.session = m_session;
91 return get_sender<Datatype>(id);
92}
std::shared_ptr< SenderConcept< Datatype > > get_sender(ConnectionId id)
Definition IOManager.hxx:96

◆ operator=() [1/2]

IOManager & dunedaq::iomanager::IOManager::operator= ( const IOManager & )
delete

IOManager is not copy-assignable.

◆ operator=() [2/2]

IOManager & dunedaq::iomanager::IOManager::operator= ( IOManager && )
delete

IOManager is not move-assignable.

◆ remove_callback() [1/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::remove_callback ( ConnectionId const & id)
inline

Definition at line 140 of file IOManager.hxx.

141{
142 auto receiver = get_receiver<Datatype>(id);
143 receiver->remove_callback();
144}

◆ remove_callback() [2/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::remove_callback ( std::string const & uid)
inline

Definition at line 148 of file IOManager.hxx.

149{
150 auto receiver = get_receiver<Datatype>(uid);
151 receiver->remove_callback();
152}

◆ remove_callback() [3/3]

template<typename Datatype >
void dunedaq::iomanager::IOManager::remove_callback ( std::string const & uid,
std::string const & tag )
inline

Definition at line 155 of file IOManager.hxx.

156{
157 auto receiver = get_receiver<Datatype>(uid, tag);
158 receiver->remove_callback();
159}

◆ reset()

void dunedaq::iomanager::IOManager::reset ( )

Definition at line 38 of file IOManager.cpp.

◆ shutdown()

void dunedaq::iomanager::IOManager::shutdown ( )

Member Data Documentation

◆ m_receivers

ReceiverMap dunedaq::iomanager::IOManager::m_receivers
private

Definition at line 101 of file IOManager.hpp.

◆ m_senders

SenderMap dunedaq::iomanager::IOManager::m_senders
private

Definition at line 100 of file IOManager.hpp.

◆ m_session

std::string dunedaq::iomanager::IOManager::m_session
private

Definition at line 102 of file IOManager.hpp.

◆ s_instance

std::shared_ptr< dunedaq::iomanager::IOManager > dunedaq::iomanager::IOManager::s_instance = nullptr
staticprivate

Definition at line 104 of file IOManager.hpp.


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