DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
NetworkReceiverModel.hpp
Go to the documentation of this file.
1
9#ifndef IOMANAGER_INCLUDE_IOMANAGER_NRECEIVER_HPP_
10#define IOMANAGER_INCLUDE_IOMANAGER_NRECEIVER_HPP_
11
13
14#include "ipm/Subscriber.hpp"
16
17
18namespace dunedaq {
19
20namespace iomanager {
21
22// NImpl
23template<typename Datatype>
24class NetworkReceiverModel : public ReceiverConcept<Datatype>
25{
26public:
27 explicit NetworkReceiverModel(ConnectionId const& conn_id);
29
31
32 Datatype receive(Receiver::timeout_t timeout) override;
33
34 std::optional<Datatype> try_receive(Receiver::timeout_t timeout) override
35 {
36 return try_read_network<Datatype>(timeout);
37 }
38 void add_callback(std::function<void(Datatype&)> callback) override { add_callback_impl<Datatype>(callback); }
39
40 void remove_callback() override;
41
42 void subscribe(std::string topic) override;
43 void unsubscribe(std::string topic) override;
44
45private:
47
48 template<typename MessageType>
49 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, MessageType>::type read_network(
50 Receiver::timeout_t const& timeout);
51
52 template<typename MessageType>
53 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value, MessageType>::type read_network(
54 Receiver::timeout_t const&);
55
56 template<typename MessageType>
57 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, std::optional<MessageType>>::type
59
60 template<typename MessageType>
61 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value,
62 std::optional<MessageType>>::type
64
65 template<typename MessageType>
66 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, void>::type add_callback_impl(
67 std::function<void(MessageType&)> callback);
68
69 template<typename MessageType>
70 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value, void>::type add_callback_impl(
71 std::function<void(MessageType&)>);
72
73 std::atomic<bool> m_with_callback{ false };
74 std::function<void(Datatype&)> m_callback;
75 std::unique_ptr<std::thread> 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 iomanager
82} // namespace dunedaq
83
85
86#endif // IOMANAGER_INCLUDE_IOMANAGER_RECEIVER_HPP_
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, std::optional< MessageType > >::type try_read_network(Receiver::timeout_t const &timeout)
void get_receiver(Receiver::timeout_t timeout)
void subscribe(std::string topic) override
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, void >::type add_callback_impl(std::function< void(MessageType &)>)
void add_callback(std::function< void(Datatype &)> callback) override
std::function< void(Datatype &)> m_callback
std::optional< Datatype > try_receive(Receiver::timeout_t timeout) override
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, MessageType >::type read_network(Receiver::timeout_t const &)
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, MessageType >::type read_network(Receiver::timeout_t const &timeout)
NetworkReceiverModel(ConnectionId const &conn_id)
void unsubscribe(std::string topic) override
std::shared_ptr< ipm::Receiver > m_network_receiver_ptr
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, void >::type add_callback_impl(std::function< void(MessageType &)> callback)
Datatype receive(Receiver::timeout_t timeout) override
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, std::optional< MessageType > >::type try_read_network(Receiver::timeout_t const &)
std::unique_ptr< std::thread > m_event_loop_runner
std::chrono::milliseconds timeout_t
Definition Receiver.hpp:28
Including Qt Headers.