DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
Receiver.cpp
Go to the documentation of this file.
1
9#include "ipm/Receiver.hpp"
10#include "ipm/opmon/ipm.pb.h"
11
12#include <utility>
13
15dunedaq::ipm::Receiver::receive(const duration_t& timeout, message_size_t bytes, bool no_tmoexcept_mode)
16{
17 if (!can_receive()) {
18 throw KnownStateForbidsReceive(ERS_HERE);
19 }
20 auto message = receive_(timeout, no_tmoexcept_mode);
21
22 if (bytes != s_any_size) {
23 auto received_size = static_cast<message_size_t>(message.data.size());
24 if (received_size != bytes) {
25 throw UnexpectedNumberOfBytes(ERS_HERE, received_size, bytes);
26 }
27 }
28
29 m_bytes += message.data.size();
30 ++m_messages;
31
32 return message;
33}
34
35void
37{
38
40
41 i.set_bytes(m_bytes.exchange(0));
42 i.set_messages(m_messages.exchange(0));
43
44 publish(std::move(i));
45}
#define ERS_HERE
std::chrono::milliseconds duration_t
Definition Receiver.hpp:78
static constexpr message_size_t s_any_size
Definition Receiver.hpp:83
std::atomic< size_t > m_bytes
Definition Receiver.hpp:121
Response receive(const duration_t &timeout, message_size_t num_bytes=s_any_size, bool no_tmoexcept_mode=false)
Definition Receiver.cpp:15
void generate_opmon_data() override
Definition Receiver.cpp:36
virtual Response receive_(const duration_t &timeout, bool no_tmoexcept_mode)=0
virtual bool can_receive() const noexcept=0
std::atomic< size_t > m_messages
Definition Receiver.hpp:122
void set_messages(::uint64_t value)
Definition ipm.pb.h:516
void set_bytes(::uint64_t value)
Definition ipm.pb.h:494