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
13dunedaq::ipm::Receiver::receive(const duration_t& timeout, message_size_t bytes, bool no_tmoexcept_mode)
14{
15 if (!can_receive()) {
16 throw KnownStateForbidsReceive(ERS_HERE);
17 }
18 auto message = receive_(timeout, no_tmoexcept_mode);
19
20 if (bytes != s_any_size) {
21 auto received_size = static_cast<message_size_t>(message.data.size());
22 if (received_size != bytes) {
23 throw UnexpectedNumberOfBytes(ERS_HERE, received_size, bytes);
24 }
25 }
26
27 m_bytes += message.data.size();
28 ++m_messages;
29
30 return message;
31}
32
33void
35{
36
38
39 i.set_bytes(m_bytes.exchange(0));
40 i.set_messages(m_messages.exchange(0));
41
42 publish(std::move(i));
43}
#define ERS_HERE
std::chrono::milliseconds duration_t
Definition Receiver.hpp:75
static constexpr message_size_t s_any_size
Definition Receiver.hpp:80
std::atomic< size_t > m_bytes
Definition Receiver.hpp:119
Response receive(const duration_t &timeout, message_size_t num_bytes=s_any_size, bool no_tmoexcept_mode=false)
Definition Receiver.cpp:13
void generate_opmon_data() override
Definition Receiver.cpp:34
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:120
void set_messages(::uint64_t value)
Definition ipm.pb.h:516
void set_bytes(::uint64_t value)
Definition ipm.pb.h:494
Unknown serialization Cannot deserialize message