12#ifndef RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
13#define RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
15#include <boost/asio/io_service.hpp>
24#include <boost/asio/io_context.hpp>
25#include <boost/asio/ip/udp.hpp>
26#include <log4cplus/logger.h>
28#include "perfc/counter.hpp"
31#include <numapp/numapolicies.hpp>
103 enum class State :
uint8_t { Idle, Run, Exit };
111 void HandleReceive(
const boost::system::error_code& error, std::size_t
bytes_transferred);
113 log4cplus::Logger& m_logger;
117 boost::asio::io_service m_io_context;
118 boost::asio::ip::udp::socket m_socket;
122 boost::asio::ip::udp::endpoint m_sender;
123 std::thread m_rcv_thr;
126 std::atomic<State> m_requested_state;
131 static std::atomic<std::uint16_t> s_count;
132 std::string m_receiver_name;
133 std::map<int32_t, QueuePtr> m_queue_map;
138 perfc::CounterU64 m_frame_counter;
139 perfc::ScopedRegistration m_frame_counter_registration;
141 perfc::CounterU64 m_frames_dropped;
142 perfc::ScopedRegistration m_frames_dropped_registration;
143 std::atomic<std::chrono::steady_clock::time_point> m_last_receive;
145 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_last_diff_monitor;
146 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_receive_time_monitor;
149 std::shared_ptr<componentFramework::BufferManager::BufferReference> m_current_buffer;
154 std::chrono::milliseconds m_receive_timeout_ms;
Alert Service interface.
Definition alertServiceIf.hpp:128
Models a single alert source that can be set or cleared.
Definition alertServiceIf.hpp:47
BufferManager is a class that will allocate a big buffer and spit it up in several cache-aligned sub-...
Definition bufferManager.hpp:46
Component metrics interface.
Definition componentMetricsIf.hpp:85
Container class that holds services of any type.
Definition serviceContainer.hpp:39
Receiving UDP data asynchronously and forwards received packets to provided packet processors.
Definition udpReceiver.hpp:60
~UdpReceiver() noexcept
Definition udpReceiver.cpp:129
void Disable()
Disables processing UDP data from socket.
Definition udpReceiver.cpp:255
void Enable()
Enables processing UDP data from socket.
Definition udpReceiver.cpp:238
UdpReceiver(const std::string &receiver_name, std::map< int32_t, QueuePtr > queue_map, size_t buffer_count, componentFramework::ServiceContainer &service, const UdpReceiverCfg &cfg)
Creates UDP receiver.
Definition udpReceiver.cpp:38
bool CheckReceiveTimeout()
Check for timeout in receiving, and send an alert.
Definition udpReceiver.cpp:262
Header file for Duration Monitor.
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
Definition ddsPubThread.cpp:17
constexpr uint16_t DATAGRAM_SIZE
maximal UDP datagram size
Definition udpReceiver.hpp:49
A container that can hold any type of service.
Structure to hold UDP receiver's configuration.
Definition udpReceiver.hpp:38
int buffer_size_bytes
Definition udpReceiver.hpp:42
std::chrono::milliseconds receive_timeout_ms
Definition udpReceiver.hpp:43
boost::asio::ip::udp::endpoint multicast_group
Definition udpReceiver.hpp:40
boost::asio::ip::udp::endpoint endpoint
Definition udpReceiver.hpp:39
numapp::NumaPolicies thread_policies
Definition udpReceiver.hpp:41