14using namespace std::chrono_literals;
18template<
typename Datatype>
22 TLOG() <<
"NetworkSenderModel created with DT! Addr: " <<
static_cast<void*
>(
this) <<
", uid=" << conn_id.
uid
26 TLOG() <<
"Initial connection attempt failed for uid=" << conn_id.
uid <<
", data_type=" << conn_id.
data_type;
30template<
typename Datatype>
38template<
typename Datatype>
44 }
catch (ipm::SendTimeoutExpired& ex) {
49template<
typename Datatype>
56template<
typename Datatype>
62 }
catch (ipm::SendTimeoutExpired& ex) {
67template<
typename Datatype>
75template<
typename Datatype>
79 auto start = std::chrono::steady_clock::now();
81 std::chrono::duration_cast<Sender::timeout_t>(std::chrono::steady_clock::now() - start) <= timeout) {
87 TLOG() <<
"Setting topic to " << this->
id().data_type;
92 std::this_thread::sleep_for(std::chrono::milliseconds(1));
97template<
typename Datatype>
98template<
typename MessageType>
99inline typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value,
void>::type
106 ERS_HERE, this->
id().uid,
"send", timeout.count(), ConnectionInstanceNotFound(
ERS_HERE, this->
id().uid));
109 auto serialized = dunedaq::serialization::serialize(message);
116 }
catch (ipm::SendTimeoutExpired
const& ex) {
117 TLOG() <<
"Timeout detected, removing sender to re-acquire connection";
124template<
typename Datatype>
125template<
typename MessageType>
126inline typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value,
void>::type
129 throw NetworkMessageNotSerializable(
ERS_HERE,
typeid(MessageType).name());
132template<
typename Datatype>
133template<
typename MessageType>
134inline typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value,
bool>::type
144 auto serialized = dunedaq::serialization::serialize(message);
152 TLOG() <<
"Timeout detected, removing sender to re-acquire connection";
159template<
typename Datatype>
160template<
typename MessageType>
161inline typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value,
bool>::type
168template<
typename Datatype>
169template<
typename MessageType>
170inline typename std::enable_if<dunedaq::serialization::is_serializable<MessageType>::value,
void>::type
179 ERS_HERE, this->
id().uid,
"send", timeout.count(), ConnectionInstanceNotFound(
ERS_HERE, this->
id().uid));
182 auto serialized = dunedaq::serialization::serialize(message);
195template<
typename Datatype>
196template<
typename MessageType>
197inline typename std::enable_if<!dunedaq::serialization::is_serializable<MessageType>::value,
void>::type
200 throw NetworkMessageNotSerializable(
ERS_HERE,
typeid(MessageType).name());
203template<
typename Datatype>
209 if (timeout > 1000ms) {
static NetworkManager & get()
std::shared_ptr< ipm::Sender > get_sender(ConnectionId const &conn_id)
void remove_sender(ConnectionId const &conn_id)
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
NetworkSenderModel(ConnectionId const &conn_id)
std::atomic< bool > m_first
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)
SenderConcept(ConnectionId const &conn_id)
std::chrono::milliseconds timeout_t
Base class for any user define issue.
#define TLOG_DEBUG(lvl,...)
void error(const Issue &issue)