DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
ipm
src
CallbackAdapter.cpp
Go to the documentation of this file.
1
9
10
#include "
CallbackAdapter.hpp
"
11
12
#include "
logging/Logging.hpp
"
13
14
#include <memory>
15
#include <string>
16
#include <utility>
17
18
namespace
dunedaq::ipm
{
19
20
CallbackAdapter::~CallbackAdapter
() noexcept
21
{
22
{
23
std::lock_guard<std::mutex> lk(
m_callback_mutex
);
24
m_callback
=
nullptr
;
25
}
26
shutdown
();
27
m_receiver_ptr
=
nullptr
;
28
}
29
30
void
31
CallbackAdapter::set_receiver
(
Receiver
* receiver_ptr)
32
{
33
{
34
std::lock_guard<std::mutex> lk(
m_callback_mutex
);
35
m_receiver_ptr
= receiver_ptr;
36
}
37
38
if
(
m_receiver_ptr
!=
nullptr
&&
m_callback
!=
nullptr
) {
39
startup
();
40
}
41
}
42
43
void
44
CallbackAdapter::set_callback
(std::function<
void
(
Receiver::Response
&)> callback)
45
{
46
{
47
std::lock_guard<std::mutex> lk(
m_callback_mutex
);
48
m_callback
= callback;
49
}
50
51
if
(
m_receiver_ptr
!=
nullptr
&&
m_callback
!=
nullptr
) {
52
startup
();
53
}
54
}
55
56
void
57
CallbackAdapter::clear_callback
()
58
{
59
{
60
std::lock_guard<std::mutex> lk(
m_callback_mutex
);
61
m_callback
=
nullptr
;
62
}
63
shutdown
();
64
}
65
66
void
67
CallbackAdapter::shutdown
()
68
{
69
if
(
m_thread
&&
m_thread
->joinable())
70
m_thread
->join();
71
72
m_is_listening
=
false
;
73
m_thread
.reset(
nullptr
);
74
}
75
76
void
77
CallbackAdapter::startup
()
78
{
79
shutdown
();
80
m_is_listening
=
false
;
81
m_thread
= std::make_unique<std::thread>([&] {
thread_loop
(); });
82
83
while
(!
m_is_listening
.load()) {
84
usleep(1000);
85
}
86
}
87
88
void
89
CallbackAdapter::thread_loop
()
90
{
91
do
{
92
try
{
93
auto
response =
m_receiver_ptr
->receive(
Receiver::s_no_block
);
94
95
TLOG_DEBUG
(45) <<
"Received "
<< response.data.size() <<
" bytes. Dispatching to callback."
;
96
{
97
std::lock_guard<std::mutex> lk(
m_callback_mutex
);
98
if
(
m_callback
!=
nullptr
) {
99
m_callback
(response);
100
}
101
}
102
}
catch
(ipm::ReceiveTimeoutExpired
const
& tmo) {
103
usleep(10000);
104
}
105
m_is_listening
=
true
;
106
}
while
(
m_callback
!=
nullptr
&&
m_receiver_ptr
!=
nullptr
);
107
}
108
109
}
// namespace dunedaq::ipm
CallbackAdapter.hpp
dunedaq::ipm::CallbackAdapter::m_callback
std::function< void(Receiver::Response &)> m_callback
Definition
CallbackAdapter.hpp:44
dunedaq::ipm::CallbackAdapter::m_receiver_ptr
Receiver * m_receiver_ptr
Definition
CallbackAdapter.hpp:42
dunedaq::ipm::CallbackAdapter::thread_loop
void thread_loop()
Definition
CallbackAdapter.cpp:89
dunedaq::ipm::CallbackAdapter::set_callback
void set_callback(std::function< void(Receiver::Response &)> callback)
Definition
CallbackAdapter.cpp:44
dunedaq::ipm::CallbackAdapter::m_callback_mutex
std::mutex m_callback_mutex
Definition
CallbackAdapter.hpp:45
dunedaq::ipm::CallbackAdapter::~CallbackAdapter
virtual ~CallbackAdapter() noexcept
Definition
CallbackAdapter.cpp:20
dunedaq::ipm::CallbackAdapter::startup
void startup()
Definition
CallbackAdapter.cpp:77
dunedaq::ipm::CallbackAdapter::m_thread
std::unique_ptr< std::thread > m_thread
Definition
CallbackAdapter.hpp:46
dunedaq::ipm::CallbackAdapter::m_is_listening
std::atomic< bool > m_is_listening
Definition
CallbackAdapter.hpp:47
dunedaq::ipm::CallbackAdapter::shutdown
void shutdown()
Definition
CallbackAdapter.cpp:67
dunedaq::ipm::CallbackAdapter::set_receiver
void set_receiver(Receiver *receiver_ptr)
Definition
CallbackAdapter.cpp:31
dunedaq::ipm::CallbackAdapter::clear_callback
void clear_callback()
Definition
CallbackAdapter.cpp:57
dunedaq::ipm::Receiver
Definition
Receiver.hpp:74
dunedaq::ipm::Receiver::s_no_block
static constexpr duration_t s_no_block
Definition
Receiver.hpp:85
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
dunedaq::ipm
An ERS Error indicating that an exception was thrown from ZMQ while performing an operation.
Definition
PluginInfo.hpp:26
dunedaq::ipm::Receiver::Response
Definition
Receiver.hpp:104
Generated on
for DUNE-DAQ by
1.17.0