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< boolm_is_listening { false }
 

Detailed Description

Definition at line 26 of file CallbackAdapter.hpp.

Constructor & Destructor Documentation

◆ CallbackAdapter()

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

◆ ~CallbackAdapter()

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

Definition at line 20 of file CallbackAdapter.cpp.

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}
std::function< void(Receiver::Response &)> m_callback

Member Function Documentation

◆ clear_callback()

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

Definition at line 57 of file CallbackAdapter.cpp.

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

◆ set_callback()

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

Definition at line 44 of file CallbackAdapter.cpp.

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}

◆ set_receiver()

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

Definition at line 31 of file CallbackAdapter.cpp.

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}

◆ shutdown()

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

Definition at line 67 of file CallbackAdapter.cpp.

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

◆ startup()

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

Definition at line 77 of file CallbackAdapter.cpp.

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}

◆ thread_loop()

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

Definition at line 89 of file CallbackAdapter.cpp.

90{
91 do {
92 try {
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}
static constexpr duration_t s_no_block
Definition Receiver.hpp:80
Response receive(const duration_t &timeout, message_size_t num_bytes=s_any_size, bool no_tmoexcept_mode=false)
Definition Receiver.cpp:15
#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 44 of file CallbackAdapter.hpp.

44{ nullptr };

◆ m_callback_mutex

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

Definition at line 45 of file CallbackAdapter.hpp.

◆ m_is_listening

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

Definition at line 47 of file CallbackAdapter.hpp.

47{ false };

◆ m_receiver_ptr

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

Definition at line 42 of file CallbackAdapter.hpp.

42{ nullptr }; // Bare pointer used here as CallbackAdapter does not own the Receiver instance,

◆ m_thread

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

Definition at line 46 of file CallbackAdapter.hpp.

46{ nullptr };

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