18 #ifndef DATA_FEED_SENDER_HPP
19 #define DATA_FEED_SENDER_HPP
24 #include "exceptions.hpp"
25 #include "messages.hpp"
34 asio::ip::udp::endpoint endpoint;
36 asio::ip::udp::socket socket;
42 uint32_t output_buffer_size = 0;
49 [
this](
const std::error_code& error, std::size_t) {
51 throw Exception(
"DataFeed::Sender::send - " + error.message());
53 output_buffer.pop_front();
55 if (--output_buffer_size) send_message();
69 asio::io_context& context,
70 const asio::ip::address&
group,
72 ) : endpoint(
group,
port), socket(context, endpoint.protocol()) { }
79 socket.set_option(asio::ip::multicast::hops(ttl));
84 socket.set_option(asio::ip::multicast::enable_loopback(
true));
92 socket.set_option(asio::ip::multicast::outbound_interface(interface));
105 inline asio::ip::address
group()
const {
return endpoint.address(); }
111 inline uint16_t
port()
const {
return endpoint.port(); }
124 template <
class T,
typename ...Args>
125 inline void send(Args && ...args) {
127 output_buffer.emplace_back();
130 new (&output_buffer.back()) T{std::forward<Args>(args)..., sequence++,
Clock::get_time()};
133 if (++output_buffer_size == 1) send_message();
139 #endif // DATA_FEED_SENDER_HPP
uint16_t port() const
Return the port this sender is running at.
Definition: sender.hpp:111
A class for multi-casting depth of book messages from a LOB::LimitOrderBook.
Definition: sender.hpp:31
SequenceNumber get_sequence() const
Return the sequence number at this sender.
Definition: sender.hpp:99
Sender(asio::io_context &context, const asio::ip::address &group, uint16_t port)
Initialize a new data feed multi-cast server.
Definition: sender.hpp:68
uint32_t SequenceNumber
A type for sequence numbers.
Definition: messages.hpp:36
TimeStamp get_time()
Return the time in nanoseconds as a 64-bit unsigned integer (Timestamp).
Definition: clock.hpp:36
Logic for sending and receiving messages on a financial data feed.
Definition: heartbeat.hpp:28
uint32_t get_output_buffer_size() const
Return the current size of the output buffer (number of messages).
Definition: sender.hpp:117
std::deque< Packet > PacketQueue
A type for queuing packet buffers.
Definition: messages.hpp:113
void set_ttl(uint32_t ttl)
Set the TTL hops for messages rendered by the sender.
Definition: sender.hpp:78
void send(Args &&...args)
Send a message.
Definition: sender.hpp:125
asio::ip::address group() const
Return the group that this sender is sending to.
Definition: sender.hpp:105
void enable_loopback()
Enable loop-back for the sender.
Definition: sender.hpp:83
void set_outbound_interface(const asio::ip::address_v4 &interface)
Set the outbound interface for the sender.
Definition: sender.hpp:91
std::array< char, 40 > Packet
Definition: messages.hpp:110