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 <string>
14#include <utility>
15#include <memory>
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 std::optional<TypeErasedPayload> try_receive(dunedaq::iomanager::Receiver::timeout_t timeout) override {
28 auto opt_payload = m_receiver->try_receive(timeout);
29 if (opt_payload) {
30 // Allocate the received payload on the heap with shared ownership,
31 // so its lifetime can outlive this function and be tied to async sends.
32 auto payload = std::make_shared<TargetPayloadType>(std::move(*opt_payload));
33 return TypeErasedPayload{ std::reinterpret_pointer_cast<const void>(payload), payload.get(), sizeof(*payload) };
34 }
35 return std::nullopt;
36 }
37
38private:
42 std::shared_ptr<iomanager::ReceiverConcept<TargetPayloadType>> m_receiver;
43};
44
45} // namespace dunedaq::asiolibs
46
47#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
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)