24) -> std::optional<MoldUdp64Header> {
25 if (packet.size() < HEADER_SIZE) {
32 std::memcpy(header.session.data(), packet.data(), header.session.size());
33 constexpr std::size_t SEQUENCE_OFFSET = 10;
34 constexpr std::size_t COUNT_OFFSET = 18;
35 header.sequence_number = read_big_endian<std::uint64_t>(packet, SEQUENCE_OFFSET);
36 header.message_count = read_big_endian<std::uint16_t>(packet, COUNT_OFFSET);
38 if (header.is_end_of_session()) {
45 m_tracker.observe(header.session_view(), header.sequence_number, header.message_count);
47 if (header.is_heartbeat()) {
55 const std::span<const std::byte> blocks = packet.subspan(HEADER_SIZE);
56 auto counting_callback = [
this](
const Message& message) {
67 m_parser.parse(blocks, counting_callback);
69 }
catch (
const std::runtime_error&) {
std::variant< SystemEventMessage, StockDirectoryMessage, StockTradingActionMessage, RegSHOMessage, MarketParticipantPositionMessage, MWCBDeclineLevelMessage, MWCBStatusMessage, IPOQuotingPeriodUpdateMessage, LULDAuctionCollarMessage, OperationalHaltMessage, AddOrderMessage, AddOrderMPIDAttributionMessage, OrderExecutedMessage, OrderExecutedWithPriceMessage, OrderCancelMessage, OrderDeleteMessage, OrderReplaceMessage, NonCrossTradeMessage, CrossTradeMessage, BrokenTradeMessage, NOIIMessage, RetailPriceImprovementIndicatorMessage, DLCRMessage > Message
A variant able to hold any one of the ITCH 5.0 message structs.