RTC Toolkit 4.0.2
Loading...
Searching...
No Matches
udpReceiver.hpp
Go to the documentation of this file.
1
12#ifndef RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
13#define RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
14
15#include <boost/asio/io_service.hpp>
16#include <chrono>
17#include <cstdint>
18#include <memory>
19#include <thread>
20
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
37constexpr int DATAGRAM_SIZE = 9500;
38
49public:
65 explicit UdpReceiver(std::uint16_t idx,
66 std::map<int32_t, QueuePtr> queue_map,
67 size_t buffer_count,
68 boost::asio::ip::udp::endpoint const& endpoint,
69 boost::asio::ip::udp::endpoint const& multicast_group,
71 numapp::NumaPolicies const& receive_thread_policies);
72 ~UdpReceiver() noexcept;
73
79 void Enable();
80
86 void Disable();
87
88private:
89 enum class State { Idle, Run, Exit };
93 void InitReceive();
97 void HandleReceive(boost::system::error_code const& error, std::size_t bytes_transferred);
98
99 log4cplus::Logger& m_logger;
100
103 boost::asio::io_service m_io_context;
104 boost::asio::ip::udp::socket m_socket;
108 boost::asio::ip::udp::endpoint m_sender;
109 std::thread m_rcv_thr;
111
112 std::atomic<State> m_requested_state;
113
117 std::uint16_t m_idx;
118 std::map<int32_t, QueuePtr> m_queue_map;
119
121
122 perfc::CounterU64 m_frame_counter;
123 perfc::ScopedRegistration m_frame_counter_registration;
124
125 perfc::CounterU64 m_frames_dropped;
126 perfc::ScopedRegistration m_frames_dropped_registration;
127 std::chrono::steady_clock::time_point m_last_receive;
128
129 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_last_diff_monitor;
130 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_receive_time_monitor;
131
132 componentFramework::BufferManager m_buffer_manager;
133 std::shared_ptr<componentFramework::BufferManager::BufferReference> m_current_buffer;
134};
135
136} // namespace rtctk::telRepub
137
138#endif // RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
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:184
Receiving UDP data asynchronously and forwards received packets to provided packet processors.
Definition: udpReceiver.hpp:48
~UdpReceiver() noexcept
Definition: udpReceiver.cpp:102
void Disable()
Disables processing UDP data from socket.
Definition: udpReceiver.cpp:197
void Enable()
Enables processing UDP data from socket.
Definition: udpReceiver.cpp:186
Header file for ComponentMetricsIf.
Header file for Duration Monitor.
Definition: ddsPubThread.cpp:17
constexpr int DATAGRAM_SIZE
maximal UDP datagram size
Definition: udpReceiver.hpp:37
UDP Buffer management.