DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
iomanager
include
iomanager
network
NetworkReceiverModel.hpp
Go to the documentation of this file.
1
8
9
#ifndef IOMANAGER_INCLUDE_IOMANAGER_NETWORK_NETWORKRECEIVERMODEL_HPP_
10
#define IOMANAGER_INCLUDE_IOMANAGER_NETWORK_NETWORKRECEIVERMODEL_HPP_
11
12
#include "
iomanager/Receiver.hpp
"
13
14
#include "
ipm/Subscriber.hpp
"
15
#include "
serialization/Serialization.hpp
"
16
17
#include <memory>
18
#include <string>
19
20
namespace
dunedaq::iomanager
{
21
22
template
<
typename
Datatype>
23
class
NetworkReceiverModel
:
public
ReceiverConcept
<Datatype>
24
{
25
public
:
26
explicit
NetworkReceiverModel
(
ConnectionId
const
& conn_id);
27
~NetworkReceiverModel
() {
remove_callback
(); }
28
29
NetworkReceiverModel
(
NetworkReceiverModel
&& other);
30
31
Datatype
receive
(
Receiver::timeout_t
timeout)
override
;
32
33
std::optional<Datatype>
try_receive
(
Receiver::timeout_t
timeout)
override
34
{
35
return
try_read_network<Datatype>
(timeout);
36
}
37
38
bool
data_pending
()
override
{
return
m_network_receiver_ptr
&&
m_network_receiver_ptr
->data_pending(); }
39
40
void
add_callback
(std::function<
void
(Datatype&)> callback)
override
{
add_callback_impl<Datatype>
(callback); }
41
42
void
remove_callback
()
override
;
43
44
void
subscribe
(std::string topic)
override
;
45
void
unsubscribe
(std::string topic)
override
;
46
47
private
:
48
void
get_receiver
(
Receiver::timeout_t
timeout);
49
50
template
<
typename
MessageType>
51
typename
std::enable_if<serialization::is_serializable<MessageType>::value, MessageType>
::type
read_network
(
52
Receiver::timeout_t
const
& timeout);
53
54
template
<
typename
MessageType>
55
typename
std::enable_if<!serialization::is_serializable<MessageType>::value, MessageType>
::type
read_network
(
56
Receiver::timeout_t
const
&);
57
58
template
<
typename
MessageType>
59
typename
std::enable_if<serialization::is_serializable<MessageType>::value, std::optional<MessageType>>
::type
60
try_read_network
(
Receiver::timeout_t
const
& timeout);
61
62
template
<
typename
MessageType>
63
typename
std::enable_if<!serialization::is_serializable<MessageType>::value, std::optional<MessageType>>
::type
64
try_read_network
(
Receiver::timeout_t
const
&);
65
66
template
<
typename
MessageType>
67
typename
std::enable_if<serialization::is_serializable<MessageType>::value,
void
>
::type
add_callback_impl
(
68
std::function<
void
(MessageType&)> callback);
69
70
template
<
typename
MessageType>
71
typename
std::enable_if<!serialization::is_serializable<MessageType>::value,
void
>
::type
add_callback_impl
(
72
std::function<
void
(MessageType&)>);
73
74
std::function<void(Datatype&)>
m_callback
;
75
std::unique_ptr<std::jthread>
m_event_loop_runner
;
76
std::shared_ptr<ipm::Receiver>
m_network_receiver_ptr
{
nullptr
};
77
std::mutex
m_callback_mutex
;
78
std::mutex
m_receive_mutex
;
79
};
80
81
}
// namespace dunedaq::iomanager
82
83
#include "
detail/NetworkReceiverModel.hxx
"
84
85
#endif
// IOMANAGER_INCLUDE_IOMANAGER_NETWORK_NETWORKRECEIVERMODEL_HPP_
NetworkReceiverModel.hxx
Serialization.hpp
Subscriber.hpp
type
type
Definition
TriggerActivity_serialization.hpp:48
dunedaq::iomanager::NetworkReceiverModel
Definition
NetworkReceiverModel.hpp:24
dunedaq::iomanager::NetworkReceiverModel::read_network
std::enable_if<!serialization::is_serializable< MessageType >::value, MessageType >::type read_network(Receiver::timeout_t const &)
dunedaq::iomanager::NetworkReceiverModel::get_receiver
void get_receiver(Receiver::timeout_t timeout)
Definition
NetworkReceiverModel.hxx:87
dunedaq::iomanager::NetworkReceiverModel::subscribe
void subscribe(std::string topic) override
Definition
NetworkReceiverModel.hxx:69
dunedaq::iomanager::NetworkReceiverModel::add_callback_impl
std::enable_if< serialization::is_serializable< MessageType >::value, void >::type add_callback_impl(std::function< void(MessageType &)> callback)
Definition
NetworkReceiverModel.hxx:167
dunedaq::iomanager::NetworkReceiverModel::data_pending
bool data_pending() override
Definition
NetworkReceiverModel.hpp:38
dunedaq::iomanager::NetworkReceiverModel::add_callback
void add_callback(std::function< void(Datatype &)> callback) override
Definition
NetworkReceiverModel.hpp:40
dunedaq::iomanager::NetworkReceiverModel::m_callback
std::function< void(Datatype &)> m_callback
Definition
NetworkReceiverModel.hpp:74
dunedaq::iomanager::NetworkReceiverModel::read_network
std::enable_if< serialization::is_serializable< MessageType >::value, MessageType >::type read_network(Receiver::timeout_t const &timeout)
Definition
NetworkReceiverModel.hxx:106
dunedaq::iomanager::NetworkReceiverModel::try_receive
std::optional< Datatype > try_receive(Receiver::timeout_t timeout) override
Definition
NetworkReceiverModel.hpp:33
dunedaq::iomanager::NetworkReceiverModel::NetworkReceiverModel
NetworkReceiverModel(ConnectionId const &conn_id)
Definition
NetworkReceiverModel.hxx:21
dunedaq::iomanager::NetworkReceiverModel::m_event_loop_runner
std::unique_ptr< std::jthread > m_event_loop_runner
Definition
NetworkReceiverModel.hpp:75
dunedaq::iomanager::NetworkReceiverModel::m_receive_mutex
std::mutex m_receive_mutex
Definition
NetworkReceiverModel.hpp:78
dunedaq::iomanager::NetworkReceiverModel::unsubscribe
void unsubscribe(std::string topic) override
Definition
NetworkReceiverModel.hxx:78
dunedaq::iomanager::NetworkReceiverModel::m_network_receiver_ptr
std::shared_ptr< ipm::Receiver > m_network_receiver_ptr
Definition
NetworkReceiverModel.hpp:76
dunedaq::iomanager::NetworkReceiverModel::try_read_network
std::enable_if< serialization::is_serializable< MessageType >::value, std::optional< MessageType > >::type try_read_network(Receiver::timeout_t const &timeout)
Definition
NetworkReceiverModel.hxx:136
dunedaq::iomanager::NetworkReceiverModel::add_callback_impl
std::enable_if<!serialization::is_serializable< MessageType >::value, void >::type add_callback_impl(std::function< void(MessageType &)>)
dunedaq::iomanager::NetworkReceiverModel::try_read_network
std::enable_if<!serialization::is_serializable< MessageType >::value, std::optional< MessageType > >::type try_read_network(Receiver::timeout_t const &)
dunedaq::iomanager::NetworkReceiverModel::~NetworkReceiverModel
~NetworkReceiverModel()
Definition
NetworkReceiverModel.hpp:27
dunedaq::iomanager::NetworkReceiverModel::m_callback_mutex
std::mutex m_callback_mutex
Definition
NetworkReceiverModel.hpp:77
dunedaq::iomanager::NetworkReceiverModel::remove_callback
void remove_callback() override
Definition
NetworkReceiverModel.hxx:54
dunedaq::iomanager::NetworkReceiverModel::receive
Datatype receive(Receiver::timeout_t timeout) override
Definition
NetworkReceiverModel.hxx:43
dunedaq::iomanager::ReceiverConcept::ReceiverConcept
ReceiverConcept(ConnectionId const &conn_id)
Definition
Receiver.hpp:50
dunedaq::iomanager::Receiver::timeout_t
std::chrono::milliseconds timeout_t
Definition
Receiver.hpp:27
Receiver.hpp
dunedaq::iomanager
Definition
IOManager.hxx:19
dunedaq::iomanager::ConnectionId
Definition
SchemaUtils.hpp:26
Generated on
for DUNE-DAQ by
1.17.0