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 23 of file IOManager.hxx.

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

◆ 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 123 of file IOManager.hxx.

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

◆ 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 131 of file IOManager.hxx.

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

◆ 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 21 of file IOManager.cpp.

26{
28
29 QueueRegistry::get().configure(queues, opmgr);
30 NetworkManager::get().configure(session, connections, connection_service, opmgr);
31}
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 &mgr)
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 53 of file IOManager.cpp.

54{
55 auto output = QueueRegistry::get().get_datatypes(uid);
56 auto networks = NetworkManager::get().get_datatypes(uid);
57 for (auto& dt : networks) {
58 output.insert(dt);
59 }
60 return output;
61}
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 55 of file IOManager.hxx.

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

◆ 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 31 of file IOManager.hxx.

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

◆ 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 42 of file IOManager.hxx.

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

◆ get_sender() [1/2]

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

Definition at line 95 of file IOManager.hxx.

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

◆ 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 83 of file IOManager.hxx.

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

◆ 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 139 of file IOManager.hxx.

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

◆ remove_callback() [2/3]

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

Definition at line 147 of file IOManager.hxx.

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

◆ 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 154 of file IOManager.hxx.

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

◆ reset()

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

Definition at line 43 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< 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: