DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
iomanager
include
iomanager
detail
IOManager.hxx
Go to the documentation of this file.
1
#include "
iomanager/network/ConfigClient.hpp
"
2
#include "
iomanager/network/NetworkManager.hpp
"
3
#include "
iomanager/network/NetworkReceiverModel.hpp
"
4
#include "
iomanager/network/NetworkSenderModel.hpp
"
5
#include "
iomanager/queue/QueueReceiverModel.hpp
"
6
#include "
iomanager/queue/QueueRegistry.hpp
"
7
#include "
iomanager/queue/QueueSenderModel.hpp
"
8
9
#include "nlohmann/json.hpp"
10
11
#include <cstdlib>
12
#include <map>
13
#include <memory>
14
#include <regex>
15
#include <string>
16
17
namespace
dunedaq
{
18
19
namespace
iomanager
{
20
21
template
<
typename
Datatype>
22
inline
void
23
IOManager::add_callback
(
ConnectionId
const
&
id
, std::function<
void
(Datatype&)> callback)
24
{
25
auto
receiver =
get_receiver<Datatype>
(
id
);
26
receiver->add_callback(callback);
27
}
28
29
template
<
typename
Datatype>
30
inline
std::shared_ptr<ReceiverConcept<Datatype>>
31
IOManager::get_receiver
(std::string
const
& uid)
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
}
40
template
<
typename
Datatype>
41
inline
std::shared_ptr<ReceiverConcept<Datatype>>
42
IOManager::get_receiver
(std::string
const
& uid, std::string
const
& tag)
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
}
52
53
template
<
typename
Datatype>
54
inline
std::shared_ptr<ReceiverConcept<Datatype>>
55
IOManager::get_receiver
(
ConnectionId
id
)
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
}
80
81
template
<
typename
Datatype>
82
inline
std::shared_ptr<SenderConcept<Datatype>>
83
IOManager::get_sender
(std::string
const
& uid)
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
}
92
93
template
<
typename
Datatype>
94
inline
std::shared_ptr<SenderConcept<Datatype>>
95
IOManager::get_sender
(
ConnectionId
id
)
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
}
120
121
template
<
typename
Datatype>
122
inline
void
123
IOManager::add_callback
(std::string
const
& uid, std::function<
void
(Datatype&)> callback)
124
{
125
auto
receiver =
get_receiver<Datatype>
(uid);
126
receiver->add_callback(callback);
127
}
128
129
template
<
typename
Datatype>
130
inline
void
131
IOManager::add_callback
(std::string
const
& uid, std::string
const
& tag, std::function<
void
(Datatype&)> callback)
132
{
133
auto
receiver =
get_receiver<Datatype>
(uid, tag);
134
receiver->add_callback(callback);
135
}
136
137
template
<
typename
Datatype>
138
inline
void
139
IOManager::remove_callback
(
ConnectionId
const
&
id
)
140
{
141
auto
receiver =
get_receiver<Datatype>
(
id
);
142
receiver->remove_callback();
143
}
144
145
template
<
typename
Datatype>
146
inline
void
147
IOManager::remove_callback
(std::string
const
& uid)
148
{
149
auto
receiver =
get_receiver<Datatype>
(uid);
150
receiver->remove_callback();
151
}
152
template
<
typename
Datatype>
153
inline
void
154
IOManager::remove_callback
(std::string
const
& uid, std::string
const
& tag)
155
{
156
auto
receiver =
get_receiver<Datatype>
(uid, tag);
157
receiver->remove_callback();
158
}
159
160
}
// namespace iomanager
161
162
// Helper functions
163
[[maybe_unused]]
static
std::shared_ptr<iomanager::IOManager>
// NOLINT(build/namespaces)
164
get_iomanager
()
165
{
166
return
iomanager::IOManager::get
();
167
}
168
169
template
<
typename
Datatype>
170
static
std::shared_ptr<iomanager::SenderConcept<Datatype>>
// NOLINT(build/namespaces)
171
get_iom_sender
(
iomanager::ConnectionId
const
&
id
)
172
{
173
return
iomanager::IOManager::get
()->get_sender<Datatype>(id);
174
}
175
176
template
<
typename
Datatype>
177
static
std::shared_ptr<iomanager::ReceiverConcept<Datatype>>
// NOLINT(build/namespaces)
178
get_iom_receiver
(
iomanager::ConnectionId
const
&
id
)
179
{
180
return
iomanager::IOManager::get
()->get_receiver<Datatype>(id);
181
}
182
183
template
<
typename
Datatype>
184
static
std::shared_ptr<iomanager::SenderConcept<Datatype>>
// NOLINT(build/namespaces)
185
get_iom_sender
(std::string
const
& uid)
186
{
187
return
iomanager::IOManager::get
()->get_sender<Datatype>(uid);
188
}
189
190
template
<
typename
Datatype>
191
static
std::shared_ptr<iomanager::ReceiverConcept<Datatype>>
// NOLINT(build/namespaces)
192
get_iom_receiver
(std::string
const
& uid)
193
{
194
return
iomanager::IOManager::get
()->get_receiver<Datatype>(uid);
195
}
196
}
// namespace dunedaq
ConfigClient.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
NetworkManager.hpp
NetworkReceiverModel.hpp
NetworkSenderModel.hpp
QueueReceiverModel.hpp
QueueRegistry.hpp
QueueSenderModel.hpp
dunedaq::iomanager::IOManager::get
static std::shared_ptr< IOManager > get()
Definition
IOManager.hpp:40
dunedaq::iomanager::IOManager::add_callback
void add_callback(ConnectionId const &id, std::function< void(Datatype &)> callback)
Definition
IOManager.hxx:23
dunedaq::iomanager::IOManager::m_session
std::string m_session
Definition
IOManager.hpp:102
dunedaq::iomanager::IOManager::m_senders
SenderMap m_senders
Definition
IOManager.hpp:100
dunedaq::iomanager::IOManager::get_sender
std::shared_ptr< SenderConcept< Datatype > > get_sender(ConnectionId id)
Definition
IOManager.hxx:95
dunedaq::iomanager::IOManager::remove_callback
void remove_callback(ConnectionId const &id)
Definition
IOManager.hxx:139
dunedaq::iomanager::IOManager::m_receivers
ReceiverMap m_receivers
Definition
IOManager.hpp:101
dunedaq::iomanager::IOManager::get_receiver
std::shared_ptr< ReceiverConcept< Datatype > > get_receiver(ConnectionId id)
Definition
IOManager.hxx:55
dunedaq::iomanager::QueueRegistry::get
static QueueRegistry & get()
Get a handle to the QueueRegistry.
Definition
QueueRegistry.cpp:24
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::iomanager
Definition
IOManager.hxx:19
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::get_iom_sender
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)
Definition
IOManager.hxx:171
dunedaq::get_iomanager
static std::shared_ptr< iomanager::IOManager > get_iomanager()
Definition
IOManager.hxx:164
dunedaq::get_iom_receiver
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)
Definition
IOManager.hxx:178
session
Definition
session.py:1
dunedaq::iomanager::ConnectionId
Definition
SchemaUtils.hpp:26
dunedaq::iomanager::ConnectionId::uid
std::string uid
Definition
SchemaUtils.hpp:27
Generated on
for DUNE-DAQ by
1.17.0