RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
udpReceiver.hpp
Go to the documentation of this file.
1
11#ifndef RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
12#define RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
13
14#include <boost/asio/io_service.hpp>
15#include <chrono>
16#include <cstdint>
17#include <memory>
18#include <thread>
19
22
23#include <boost/asio/io_context.hpp>
24#include <boost/asio/ip/udp.hpp>
25#include <log4cplus/logger.h>
26
27#include "perfc/counter.hpp"
28#include "queue.hpp"
30#include <numapp/numapolicies.hpp>
31
32namespace rtctk::telRepub {
33
38 boost::asio::ip::udp::endpoint endpoint;
39 boost::asio::ip::udp::endpoint multicast_group;
40 numapp::NumaPolicies thread_policies;
42 std::chrono::milliseconds receive_timeout_ms = std::chrono::milliseconds(20000); // default 20s
43};
44
48constexpr uint16_t DATAGRAM_SIZE = 9500;
49
60public:
73 explicit UdpReceiver(const std::string& receiver_name,
74 std::map<int32_t, QueuePtr> queue_map,
75 size_t buffer_count,
77 const UdpReceiverCfg& cfg);
78 ~UdpReceiver() noexcept;
79
85 void Enable();
86
92 void Disable();
93
100
101private:
102 enum class State : uint8_t { Idle, Run, Exit };
106 void InitReceive();
110 void HandleReceive(const boost::system::error_code& error, std::size_t bytes_transferred);
111
112 log4cplus::Logger& m_logger;
113
116 boost::asio::io_service m_io_context;
117 boost::asio::ip::udp::socket m_socket;
121 boost::asio::ip::udp::endpoint m_sender;
122 std::thread m_rcv_thr;
124
125 std::atomic<State> m_requested_state;
126
130 static std::atomic<std::uint16_t> s_count;
131 std::string m_receiver_name;
132 std::map<int32_t, QueuePtr> m_queue_map;
133
136
137 perfc::CounterU64 m_frame_counter;
138 perfc::ScopedRegistration m_frame_counter_registration;
139
140 perfc::CounterU64 m_frames_dropped;
141 perfc::ScopedRegistration m_frames_dropped_registration;
142 std::atomic<std::chrono::steady_clock::time_point> m_last_receive;
143
144 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_last_diff_monitor;
145 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_receive_time_monitor;
146
147 componentFramework::BufferManager m_buffer_manager;
148 std::shared_ptr<componentFramework::BufferManager::BufferReference> m_current_buffer;
149
150 // receive timeout alert
151 componentFramework::AlertSource m_receive_timeout_alert;
152
153 std::chrono::milliseconds m_receive_timeout_ms;
154};
155
156} // namespace rtctk::telRepub
157
158#endif // RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
Declares AlertService.
Alert Service interface.
Definition alertServiceIf.hpp:138
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:44
Component metrics interface.
Definition componentMetricsIf.hpp:163
Container class that holds services of any type.
Definition serviceContainer.hpp:38
~UdpReceiver() noexcept
Definition udpReceiver.cpp:131
void Disable()
Disables processing UDP data from socket.
Definition udpReceiver.cpp:258
void Enable()
Enables processing UDP data from socket.
Definition udpReceiver.cpp:241
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:37
bool CheckReceiveTimeout()
Check for timeout in receiving, and send an alert.
Definition udpReceiver.cpp:265
Header file for Duration Monitor.
Definition ddsPubThread.cpp:16
constexpr uint16_t DATAGRAM_SIZE
maximal UDP datagram size
Definition udpReceiver.hpp:48
UDP Buffer management.
A container that can hold any type of service.
Structure to hold UDP receiver's configuration.
Definition udpReceiver.hpp:37
int buffer_size_bytes
Definition udpReceiver.hpp:41
std::chrono::milliseconds receive_timeout_ms
Definition udpReceiver.hpp:42
boost::asio::ip::udp::endpoint multicast_group
Definition udpReceiver.hpp:39
boost::asio::ip::udp::endpoint endpoint
Definition udpReceiver.hpp:38
numapp::NumaPolicies thread_policies
Definition udpReceiver.hpp:40