itch-mold-replay 1.0
Time-accurate NASDAQ TotalView-ITCH 5.0 replay over MoldUDP64
Loading...
Searching...
No Matches
heartbeat.h
Go to the documentation of this file.
1#pragma once
2
3#include "imr/mold/types.h"
4#include "imr/util/file_descriptor.h"
5
6#include <atomic>
7#include <chrono>
8#include <netinet/in.h>
9#include <thread>
10
11namespace imr::mold::downstream
12{
13 /// Sends MoldUDP64 heartbeat packets at a configured interval
15 {
16 public:
17 /**
18 @param period Interval between heartbeat packets.
19 @param socket UDP socket to send on
20 @param next_seq Sequence number read on each send; must outlive this object.
21 */
22 Heartbeat(std::chrono::nanoseconds period,
23 util::FileDescriptor& socket,
24 const sockaddr_in& mcast_group,
25 std::string_view session,
26 const std::atomic<types::header::SequenceNumber>& next_seq);
27
28 void start();
29
30 void stop();
31
32 [[nodiscard]]
33 std::chrono::nanoseconds period() const noexcept;
34
35 private:
36 std::array<char, types::header::length> packet_{};
37 std::chrono::nanoseconds period_;
38 util::FileDescriptor* socket_;
39
40 sockaddr_in mcast_group_;
41 const std::atomic<types::header::SequenceNumber>* next_seq_;
42 std::jthread thread_;
43
44 void send() noexcept;
45 };
46}
Sends MoldUDP64 heartbeat packets at a configured interval.
Definition heartbeat.h:15
Heartbeat(std::chrono::nanoseconds period, util::FileDescriptor &socket, const sockaddr_in &mcast_group, std::string_view session, const std::atomic< types::header::SequenceNumber > &next_seq)
std::chrono::nanoseconds period() const noexcept
RAII file descriptor wrapper.
Definition file_descriptor.h:19
Definition types.h:9
constexpr std::size_t length
Definition types.h:14
Definition types.h:7
Definition file_descriptor.h:11
Definition feed.h:17