DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
NetworkSenderModel.hpp
Go to the documentation of this file.
1
9#ifndef IOMANAGER_INCLUDE_IOMANAGER_NSENDER_HPP_
10#define IOMANAGER_INCLUDE_IOMANAGER_NSENDER_HPP_
11
12#include "iomanager/Sender.hpp"
13
14#include "ipm/Sender.hpp"
16
17#include <memory>
18#include <string>
19#include <utility>
20
21namespace dunedaq::iomanager {
22
23// NImpl
24template<typename Datatype>
25class NetworkSenderModel : public SenderConcept<Datatype>
26{
27public:
28 using SenderConcept<Datatype>::send;
29
30 explicit NetworkSenderModel(ConnectionId const& conn_id);
31
33
34 void send(Datatype&& data, Sender::timeout_t timeout) override;
35
36 bool try_send(Datatype&& data, Sender::timeout_t timeout) override;
37
38 void send_with_topic(Datatype&& data, Sender::timeout_t timeout, std::string topic) override;
39
40 bool is_ready_for_sending(Sender::timeout_t timeout) override;
41
42private:
43 void get_sender(Sender::timeout_t const& timeout);
44
45 template<typename MessageType>
46 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, void>::type write_network(
47 MessageType& message,
48 Sender::timeout_t const& timeout);
49
50 template<typename MessageType>
51 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value, void>::type write_network(
52 MessageType&,
53 Sender::timeout_t const&);
54
55 template<typename MessageType>
56 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, bool>::type try_write_network(
57 MessageType& message,
58 Sender::timeout_t const& timeout);
59
60 template<typename MessageType>
61 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value, bool>::type try_write_network(
62 MessageType&,
63 Sender::timeout_t const&);
64
65 template<typename MessageType>
66 typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value, void>::type write_network_with_topic(
67 MessageType& message,
68 Sender::timeout_t const& timeout, std::string topic);
69
70 template<typename MessageType>
71 typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value, void>::type
73 MessageType&,
74 Sender::timeout_t const&, std::string);
75
77
78 std::shared_ptr<ipm::Sender> m_network_sender_ptr;
79 std::mutex m_send_mutex;
80 std::string m_topic{ "" };
81 std::atomic<bool> m_first{ true };
82};
83
84} // namespace dunedaq::iomanager
85
87
88#endif // IOMANAGER_INCLUDE_IOMANAGER_SENDER_HPP_
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, void >::type write_network_with_topic(MessageType &, Sender::timeout_t const &, std::string)
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, void >::type write_network(MessageType &, Sender::timeout_t const &)
void get_sender(Sender::timeout_t const &timeout)
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, void >::type write_network(MessageType &message, Sender::timeout_t const &timeout)
bool try_send(Datatype &&data, Sender::timeout_t timeout) override
void send(Datatype &&data, Sender::timeout_t timeout) override
NetworkSenderModel(ConnectionId const &conn_id)
std::shared_ptr< ipm::Sender > m_network_sender_ptr
bool is_ready_for_sending(Sender::timeout_t timeout) override
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, void >::type write_network_with_topic(MessageType &message, Sender::timeout_t const &timeout, std::string topic)
void send_with_topic(Datatype &&data, Sender::timeout_t timeout, std::string topic) override
std::enable_if< dunedaq::serialization::is_serializable< MessageType >::value, bool >::type try_write_network(MessageType &message, Sender::timeout_t const &timeout)
Sender::timeout_t extend_first_timeout(Sender::timeout_t timeout)
std::enable_if<!dunedaq::serialization::is_serializable< MessageType >::value, bool >::type try_write_network(MessageType &, Sender::timeout_t const &)
std::chrono::milliseconds timeout_t
Definition Sender.hpp:24