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
13#include <memory>
14#include <string>
15#include <utility>
16
17namespace dunedaq::asiolibs {
18
19template<class TargetPayloadType>
21{
22public:
23 explicit GenericReceiverModel(const std::string& receiver_connection_name)
24 : m_receiver(get_iom_receiver<TargetPayloadType>(receiver_connection_name))
25 {
26 }
27
28 std::optional<TypeErasedPayload> try_receive(dunedaq::iomanager::Receiver::timeout_t timeout) override
29 {
30 auto opt_payload = m_receiver->try_receive(timeout);
31 if (opt_payload) {
32 // Allocate the received payload on the heap with shared ownership,
33 // so its lifetime can outlive this function and be tied to async sends.
34 auto payload = std::make_shared<TargetPayloadType>(std::move(*opt_payload));
35 return TypeErasedPayload{ std::reinterpret_pointer_cast<const void>(payload), payload.get(), sizeof(*payload) };
36 }
37 return std::nullopt;
38 }
39
40private:
44 std::shared_ptr<iomanager::ReceiverConcept<TargetPayloadType>> m_receiver;
45};
46
47} // namespace dunedaq::asiolibs
48
49#endif // ASIOLIBS_SRC_GENERICRECEIVERMODEL_HPP_
GenericReceiverModel(const std::string &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