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_NETWORK_NETWORKSENDERMODEL_HPP_
10#define IOMANAGER_INCLUDE_IOMANAGER_NETWORK_NETWORKSENDERMODEL_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<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<!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<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<!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<serialization::is_serializable<MessageType>::value, void>::type
67 write_network_with_topic(MessageType& message, Sender::timeout_t const& timeout, std::string topic);
68
69 template<typename MessageType>
70 typename std::enable_if<!serialization::is_serializable<MessageType>::value, void>::type
71 write_network_with_topic(MessageType&, Sender::timeout_t const&, std::string);
72
74
75 std::shared_ptr<ipm::Sender> m_network_sender_ptr;
76 std::mutex m_send_mutex;
77 std::string m_topic{ "" };
78 std::atomic<bool> m_first{ true };
79};
80
81} // namespace dunedaq::iomanager
82
84
85#endif // IOMANAGER_INCLUDE_IOMANAGER_NETWORK_NETWORKSENDERMODEL_HPP_
void get_sender(Sender::timeout_t const &timeout)
std::enable_if< 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
std::enable_if<!serialization::is_serializable< MessageType >::value, void >::type write_network_with_topic(MessageType &, Sender::timeout_t const &, std::string)
std::enable_if<!serialization::is_serializable< MessageType >::value, void >::type write_network(MessageType &, Sender::timeout_t const &)
NetworkSenderModel(ConnectionId const &conn_id)
std::enable_if<!serialization::is_serializable< MessageType >::value, bool >::type try_write_network(MessageType &, Sender::timeout_t const &)
std::shared_ptr< ipm::Sender > m_network_sender_ptr
bool is_ready_for_sending(Sender::timeout_t timeout) override
std::enable_if< 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< 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::chrono::milliseconds timeout_t
Definition Sender.hpp:24