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

#include <CallbackAdapter.hpp>

Collaboration diagram for dunedaq::ipm::CallbackAdapter:
[legend]

Public Member Functions

 CallbackAdapter ()=default
 
virtual ~CallbackAdapter () noexcept
 
void set_receiver (Receiver *receiver_ptr)
 
void set_callback (std::function< void(Receiver::Response &)> callback)
 
void clear_callback ()
 

Private Member Functions

void startup ()
 
void shutdown ()
 
void thread_loop ()
 

Private Attributes

Receiverm_receiver_ptr { nullptr }
 
std::function< void(Receiver::Response &)> m_callback { nullptr }
 
std::mutex m_callback_mutex
 
std::unique_ptr< std::thread > m_thread { nullptr }
 
std::atomic< bool > m_is_listening { false }
 

Detailed Description

Definition at line 24 of file CallbackAdapter.hpp.

Constructor & Destructor Documentation

◆ CallbackAdapter()

dunedaq::ipm::CallbackAdapter::CallbackAdapter ( )
default

◆ ~CallbackAdapter()

dunedaq::ipm::CallbackAdapter::~CallbackAdapter ( )
virtualnoexcept

Definition at line 19 of file CallbackAdapter.cpp.

20{
21 {
22 std::lock_guard<std::mutex> lk(m_callback_mutex);
23 m_callback = nullptr;
24 }
25 shutdown();
26 m_receiver_ptr = nullptr;
27}
std::function< void(Receiver::Response &)> m_callback

Member Function Documentation

◆ clear_callback()

void dunedaq::ipm::CallbackAdapter::clear_callback ( )

Definition at line 56 of file CallbackAdapter.cpp.

57{
58 {
59 std::lock_guard<std::mutex> lk(m_callback_mutex);
60 m_callback = nullptr;
61 }
62 shutdown();
63}

◆ set_callback()

void dunedaq::ipm::CallbackAdapter::set_callback ( std::function< void(Receiver::Response &)> callback)

Definition at line 43 of file CallbackAdapter.cpp.

44{
45 {
46 std::lock_guard<std::mutex> lk(m_callback_mutex);
47 m_callback = callback;
48 }
49
50 if (m_receiver_ptr != nullptr && m_callback != nullptr) {
51 startup();
52 }
53}

◆ set_receiver()

void dunedaq::ipm::CallbackAdapter::set_receiver ( Receiver * receiver_ptr)

Definition at line 30 of file CallbackAdapter.cpp.

31{
32 {
33 std::lock_guard<std::mutex> lk(m_callback_mutex);
34 m_receiver_ptr = receiver_ptr;
35 }
36
37 if (m_receiver_ptr != nullptr && m_callback != nullptr) {
38 startup();
39 }
40}

◆ shutdown()

void dunedaq::ipm::CallbackAdapter::shutdown ( )
private

Definition at line 66 of file CallbackAdapter.cpp.

67{
68 if (m_thread && m_thread->joinable())
69 m_thread->join();
70
71 m_is_listening = false;
72 m_thread.reset(nullptr);
73}
std::unique_ptr< std::thread > m_thread
std::atomic< bool > m_is_listening

◆ startup()

void dunedaq::ipm::CallbackAdapter::startup ( )
private

Definition at line 76 of file CallbackAdapter.cpp.

77{
78 shutdown();
79 m_is_listening = false;
80 m_thread.reset(new std::thread([&] { thread_loop(); }));
81
82 while (!m_is_listening.load()) {
83 usleep(1000);
84 }
85}

◆ thread_loop()

void dunedaq::ipm::CallbackAdapter::thread_loop ( )
private

Definition at line 88 of file CallbackAdapter.cpp.

89{
90 do {
91 try {
93
94 TLOG_DEBUG(25) << "Received " << response.data.size() << " bytes. Dispatching to callback.";
95 {
96 std::lock_guard<std::mutex> lk(m_callback_mutex);
97 if (m_callback != nullptr) {
98 m_callback(response);
99 }
100 }
101 } catch (ipm::ReceiveTimeoutExpired const& tmo) {
102 usleep(10000);
103 }
104 m_is_listening = true;
105 } while (m_callback != nullptr && m_receiver_ptr != nullptr);
106}
static constexpr duration_t s_no_block
Definition Receiver.hpp:77
Response receive(const duration_t &timeout, message_size_t num_bytes=s_any_size, bool no_tmoexcept_mode=false)
Definition Receiver.cpp:13
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

Member Data Documentation

◆ m_callback

std::function<void(Receiver::Response&)> dunedaq::ipm::CallbackAdapter::m_callback { nullptr }
private

Definition at line 41 of file CallbackAdapter.hpp.

41{ nullptr };

◆ m_callback_mutex

std::mutex dunedaq::ipm::CallbackAdapter::m_callback_mutex
mutableprivate

Definition at line 42 of file CallbackAdapter.hpp.

◆ m_is_listening

std::atomic<bool> dunedaq::ipm::CallbackAdapter::m_is_listening { false }
private

Definition at line 44 of file CallbackAdapter.hpp.

44{ false };

◆ m_receiver_ptr

Receiver* dunedaq::ipm::CallbackAdapter::m_receiver_ptr { nullptr }
private

Definition at line 40 of file CallbackAdapter.hpp.

40{ nullptr };

◆ m_thread

std::unique_ptr<std::thread> dunedaq::ipm::CallbackAdapter::m_thread { nullptr }
private

Definition at line 43 of file CallbackAdapter.hpp.

43{ nullptr };

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