LibQuicR
Loading...
Searching...
No Matches
subscribe_track_handler.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) 2024 Cisco Systems
2// SPDX-License-Identifier: BSD-2-Clause
3
4#pragma once
5
6#include <quicr/detail/base_track_handler.h>
7#include <quicr/detail/messages.h>
8#include <quicr/detail/stream_buffer.h>
9#include <quicr/metrics.h>
10
11namespace quicr {
12
21 class SubscribeTrackHandler : public BaseTrackHandler
22 {
23 public:
27 enum class Error : uint8_t
28 {
29 kOk = 0,
33 };
34
38 enum class Status : uint8_t
39 {
40 kOk = 0,
42 kError,
47 };
48
49 protected:
55 SubscribeTrackHandler(const FullTrackName& full_track_name,
56 messages::ObjectPriority priority,
57 messages::GroupOrder group_order,
58 messages::FilterType filter_type)
59 : BaseTrackHandler(full_track_name)
60 , priority_(priority)
61 , group_order_(group_order)
62 , filter_type_(filter_type)
63 {
64 }
65
66 public:
75 static std::shared_ptr<SubscribeTrackHandler> Create(
76 const FullTrackName& full_track_name,
77 messages::ObjectPriority priority,
78 messages::GroupOrder group_order = messages::GroupOrder::kAscending,
79 messages::FilterType filter_type = messages::FilterType::kLatestObject)
80 {
81 return std::shared_ptr<SubscribeTrackHandler>(
82 new SubscribeTrackHandler(full_track_name, priority, group_order, filter_type));
83 }
84
90 constexpr Status GetStatus() const noexcept { return status_; }
91
97 void SetPriority(uint8_t priority) noexcept { priority_ = priority; }
98
104 constexpr messages::ObjectPriority GetPriority() const noexcept { return priority_; }
105
112 constexpr messages::GroupOrder GetGroupOrder() const noexcept { return group_order_; }
113
120 constexpr messages::FilterType GetFilterType() const noexcept { return filter_type_; }
121
122 constexpr std::optional<messages::GroupId> GetLatestGroupID() const noexcept { return latest_group_id_; }
123 constexpr std::optional<messages::ObjectId> GetLatestObjectID() const noexcept { return latest_object_id_; }
124
125 constexpr void SetLatestGroupID(messages::GroupId new_id) noexcept { latest_group_id_ = new_id; }
126 constexpr void SetLatestObjectID(messages::ObjectId new_id) noexcept { latest_object_id_ = new_id; }
127
128 // --------------------------------------------------------------------------
129 // Public Virtual API callback event methods
130 // --------------------------------------------------------------------------
133
134
145 virtual void ObjectReceived([[maybe_unused]] const ObjectHeaders& object_headers,
146 [[maybe_unused]] BytesSpan data);
147
157 virtual void StreamDataRecv(bool is_start,
158 uint64_t stream_id,
159 std::shared_ptr<const std::vector<uint8_t>> data);
160
168 virtual void DgramDataRecv(std::shared_ptr<const std::vector<uint8_t>> data);
169
180 virtual void PartialObjectReceived([[maybe_unused]] const ObjectHeaders& object_headers,
181 [[maybe_unused]] BytesSpan data)
182 {
183 }
184
192 virtual void StatusChanged([[maybe_unused]] Status status) {}
193
203 virtual void MetricsSampled([[maybe_unused]] const SubscribeTrackMetrics& metrics) {}
204
205 void RequestNewGroup() noexcept;
206
208
216
217 std::function<void(messages::SubscribeId, messages::TrackAlias)> new_group_request_callback_;
218
219 protected:
224 void SetStatus(Status status) noexcept
225 {
226 status_ = status;
227 StatusChanged(status);
228 }
229
230 private:
232 messages::ObjectPriority priority_;
233 messages::GroupOrder group_order_;
234 messages::FilterType filter_type_;
235 StreamBuffer<uint8_t> stream_buffer_;
236 uint64_t current_stream_id_{ 0 };
237 std::optional<messages::GroupId> latest_group_id_;
238 std::optional<messages::ObjectId> latest_object_id_;
239
240 friend class Transport;
241 friend class Client;
242 friend class Server;
243 };
244
245} // namespace moq
MoQ Client.
Definition client.h:21
MoQ Server.
Definition server.h:21
MOQ track handler for subscribed track.
Definition subscribe_track_handler.h:22
constexpr std::optional< messages::GroupId > GetLatestGroupID() const noexcept
Definition subscribe_track_handler.h:122
Error
Receive status codes.
Definition subscribe_track_handler.h:28
std::function< void(messages::SubscribeId, messages::TrackAlias)> new_group_request_callback_
Definition subscribe_track_handler.h:217
static std::shared_ptr< SubscribeTrackHandler > Create(const FullTrackName &full_track_name, messages::ObjectPriority priority, messages::GroupOrder group_order=messages::GroupOrder::kAscending, messages::FilterType filter_type=messages::FilterType::kLatestObject)
Create shared Subscribe track handler.
Definition subscribe_track_handler.h:75
SubscribeTrackHandler(const FullTrackName &full_track_name, messages::ObjectPriority priority, messages::GroupOrder group_order, messages::FilterType filter_type)
Subscribe track handler constructor.
Definition subscribe_track_handler.h:55
virtual void DgramDataRecv(std::shared_ptr< const std::vector< uint8_t > > data)
Notification of received datagram data.
void SetStatus(Status status) noexcept
Set the subscribe status.
Definition subscribe_track_handler.h:224
virtual void MetricsSampled(const SubscribeTrackMetrics &metrics)
Notification callback to provide sampled metrics.
Definition subscribe_track_handler.h:203
constexpr Status GetStatus() const noexcept
Get the status of the subscribe.
Definition subscribe_track_handler.h:90
SubscribeTrackMetrics subscribe_track_metrics_
Subscribe metrics for the track.
Definition subscribe_track_handler.h:215
virtual void StreamDataRecv(bool is_start, uint64_t stream_id, std::shared_ptr< const std::vector< uint8_t > > data)
Notification of received stream data slice.
constexpr void SetLatestGroupID(messages::GroupId new_id) noexcept
Definition subscribe_track_handler.h:125
constexpr messages::FilterType GetFilterType() const noexcept
Get subscription filter type.
Definition subscribe_track_handler.h:120
void RequestNewGroup() noexcept
Status
Status codes for the subscribe track.
Definition subscribe_track_handler.h:39
@ kSendingUnsubscribe
In this state, callbacks will not be called.
virtual void PartialObjectReceived(const ObjectHeaders &object_headers, BytesSpan data)
Notification of a partial object received data object.
Definition subscribe_track_handler.h:180
virtual void ObjectReceived(const ObjectHeaders &object_headers, BytesSpan data)
Notification of received [full] data object.
constexpr std::optional< messages::ObjectId > GetLatestObjectID() const noexcept
Definition subscribe_track_handler.h:123
void SetPriority(uint8_t priority) noexcept
Set the priority of received data.
Definition subscribe_track_handler.h:97
virtual void StatusChanged(Status status)
Notification of subscribe status.
Definition subscribe_track_handler.h:192
constexpr messages::GroupOrder GetGroupOrder() const noexcept
Get subscription group order.
Definition subscribe_track_handler.h:112
constexpr messages::ObjectPriority GetPriority() const noexcept
Get subscription priority.
Definition subscribe_track_handler.h:104
constexpr void SetLatestObjectID(messages::ObjectId new_id) noexcept
Definition subscribe_track_handler.h:126
MOQ Implementation supporting both client and server modes.
Definition transport.h:34
Definition transport.h:26
Span< const Byte > BytesSpan
Definition common.h:23
Full track name struct.
Definition track_name.h:267
Object headers struct.
Definition object.h:32
Definition metrics.h:31