RTC Toolkit 5.0.0
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
23
24#include <boost/asio/io_context.hpp>
25#include <boost/asio/ip/udp.hpp>
26#include <log4cplus/logger.h>
27
28#include "perfc/counter.hpp"
29#include "queue.hpp"
31#include <numapp/numapolicies.hpp>
32
33namespace rtctk::telRepub {
34
39 boost::asio::ip::udp::endpoint endpoint;
40 boost::asio::ip::udp::endpoint multicast_group;
41 numapp::NumaPolicies thread_policies;
43 std::chrono::milliseconds receive_timeout_ms = std::chrono::milliseconds(20000); // default 20s
44};
45
49constexpr uint16_t DATAGRAM_SIZE = 9500;
50
61public:
74 explicit UdpReceiver(const std::string& receiver_name,
75 std::map<int32_t, QueuePtr> queue_map,
76 size_t buffer_count,
78 const UdpReceiverCfg& cfg);
79 ~UdpReceiver() noexcept;
80
86 void Enable();
87
93 void Disable();
94
100 bool CheckReceiveTimeout();
101
102private:
103 enum class State : uint8_t { Idle, Run, Exit };
107 void InitReceive();
111 void HandleReceive(const boost::system::error_code& error, std::size_t bytes_transferred);
112
113 log4cplus::Logger& m_logger;
114
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;
125
126 std::atomic<State> m_requested_state;
127
131 static std::atomic<std::uint16_t> s_count;
132 std::string m_receiver_name;
133 std::map<int32_t, QueuePtr> m_queue_map;
134
137
138 perfc::CounterU64 m_frame_counter;
139 perfc::ScopedRegistration m_frame_counter_registration;
140
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;
144
145 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_last_diff_monitor;
146 std::unique_ptr<componentFramework::DurationMonitor<>> m_frame_receive_time_monitor;
147
148 componentFramework::BufferManager m_buffer_manager;
149 std::shared_ptr<componentFramework::BufferManager::BufferReference> m_current_buffer;
150
151 // receive timeout alert
152 componentFramework::AlertSource m_receive_timeout_alert;
153
154 std::chrono::milliseconds m_receive_timeout_ms;
155};
156
157} // namespace rtctk::telRepub
158
159#endif // RTCTK_REUSABLECOMPONENT_TELREPUB_UDPRECEIVER_HPP
Declares AlertService.
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
UDP Buffer management.
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