DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
GenericReceiverModel.hpp
Go to the documentation of this file.
1
8#ifndef ASIOLIBS_SRC_GENERICRECEIVERMODEL_HPP_
9#define ASIOLIBS_SRC_GENERICRECEIVERMODEL_HPP_
10
12
13namespace dunedaq::asiolibs {
14
15template<class TargetPayloadType>
17{
18public:
19 explicit GenericReceiverModel(const std::string& raw_data_receiver_connection_name)
20 : m_receiver(get_iom_receiver<TargetPayloadType>(raw_data_receiver_connection_name))
21 {}
22
23 std::optional<TypeErasedPayload> try_receive(dunedaq::iomanager::Receiver::timeout_t timeout) override {
24 auto opt_payload = m_receiver->try_receive(timeout);
25 if (opt_payload) {
26 // Allocate the received payload on the heap with shared ownership,
27 // so its lifetime can outlive this function and be tied to async sends.
28 auto payload = std::make_shared<TargetPayloadType>(std::move(*opt_payload));
29 return TypeErasedPayload{ std::reinterpret_pointer_cast<const void>(payload), payload.get(), sizeof(*payload) };
30 }
31 return std::nullopt;
32 }
33
34private:
38 std::shared_ptr<iomanager::ReceiverConcept<TargetPayloadType>> m_receiver;
39};
40
41} // namespace dunedaq::asiolibs
42
43#endif // ASIOLIBS_SRC_GENERICRECEIVERMODEL_HPP_
GenericReceiverModel(const std::string &raw_data_receiver_connection_name)
std::shared_ptr< iomanager::ReceiverConcept< TargetPayloadType > > m_receiver
Generic IOManager Receiver.
std::optional< TypeErasedPayload > try_receive(dunedaq::iomanager::Receiver::timeout_t timeout) override
std::chrono::milliseconds timeout_t
Definition Receiver.hpp:27
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)