6#include <quicr/detail/base_track_handler.h>
7#include <quicr/detail/messages.h>
8#include <quicr/detail/stream_buffer.h>
72 messages::SubscriberPriority priority,
73 messages::GroupOrder group_order,
74 messages::FilterType filter_type,
75 const std::optional<JoiningFetch>& joining_fetch = std::nullopt,
76 bool publisher_initiated =
false)
77 : BaseTrackHandler(full_track_name)
79 , group_order_(group_order)
80 , filter_type_(filter_type)
81 , joining_fetch_(publisher_initiated ? std::nullopt : joining_fetch)
82 , publisher_initiated_(publisher_initiated)
95 static std::shared_ptr<SubscribeTrackHandler>
Create(
97 messages::SubscriberPriority priority,
98 messages::GroupOrder group_order = messages::GroupOrder::kAscending,
99 messages::FilterType filter_type = messages::FilterType::kLargestObject)
101 return std::shared_ptr<SubscribeTrackHandler>(
117 void SetPriority(uint8_t priority)
noexcept { priority_ = priority; }
124 constexpr messages::SubscriberPriority
GetPriority() const noexcept {
return priority_; }
132 constexpr messages::GroupOrder
GetGroupOrder() const noexcept {
return group_order_; }
140 constexpr messages::FilterType
GetFilterType() const noexcept {
return filter_type_; }
142 constexpr std::optional<messages::Location>
GetLatestLocation() const noexcept {
return latest_location_; }
144 constexpr void SetLatestLocation(messages::Location new_location)
noexcept { latest_location_ = new_location; }
149 std::optional<JoiningFetch>
GetJoiningFetch() const noexcept {
return joining_fetch_; }
166 std::optional<uint64_t>
GetTrackAlias() const noexcept {
return track_alias_; }
237 std::shared_ptr<
const std::vector<uint8_t>> data);
246 virtual void DgramDataRecv(std::shared_ptr<
const std::vector<uint8_t>> data);
318 messages::SubscriberPriority priority_;
319 messages::GroupOrder group_order_;
320 messages::FilterType filter_type_;
321 uint64_t current_stream_id_{ 0 };
322 std::optional<messages::Location> latest_location_;
323 std::optional<JoiningFetch> joining_fetch_;
324 std::optional<uint64_t> track_alias_;
325 std::optional<uint64_t> received_track_alias_;
326 std::chrono::milliseconds delivery_timeout_{ 0 };
328 bool publisher_initiated_{
false };
Error
Receive status codes.
Definition subscribe_track_handler.h:28
@ kNoData
Definition subscribe_track_handler.h:32
@ kNotSubscribed
Definition subscribe_track_handler.h:31
@ kNotAuthorized
Definition subscribe_track_handler.h:30
@ kOk
Definition subscribe_track_handler.h:29
std::optional< JoiningFetch > GetJoiningFetch() const noexcept
Get joining fetch info, if any.
Definition subscribe_track_handler.h:149
std::optional< uint64_t > GetReceivedTrackAlias() const noexcept
Get the received track alias.
Definition subscribe_track_handler.h:183
virtual void DgramDataRecv(std::shared_ptr< const std::vector< uint8_t > > data)
Notification of received datagram data.
StreamBuffer< uint8_t > stream_buffer_
Definition subscribe_track_handler.h:310
constexpr std::optional< messages::Location > GetLatestLocation() const noexcept
Definition subscribe_track_handler.h:142
void SetStatus(Status status) noexcept
Set the subscribe status.
Definition subscribe_track_handler.h:304
uint64_t next_object_id_
Definition subscribe_track_handler.h:312
virtual void MetricsSampled(const SubscribeTrackMetrics &metrics)
Notification callback to provide sampled metrics.
Definition subscribe_track_handler.h:281
bool sent_first_object_
Definition subscribe_track_handler.h:314
friend class Transport
Definition subscribe_track_handler.h:330
constexpr Status GetStatus() const noexcept
Get the status of the subscribe.
Definition subscribe_track_handler.h:110
void SetDeliveryTimeout(std::chrono::milliseconds timeout) noexcept
Definition subscribe_track_handler.h:204
std::chrono::milliseconds GetDeliveryTimeout() const noexcept
Definition subscribe_track_handler.h:202
friend class Client
Definition subscribe_track_handler.h:331
SubscribeTrackMetrics subscribe_track_metrics_
Subscribe metrics for the track.
Definition subscribe_track_handler.h:297
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 messages::FilterType GetFilterType() const noexcept
Get subscription filter type.
Definition subscribe_track_handler.h:140
void Resume() noexcept
Resume receiving data.
std::optional< uint64_t > GetTrackAlias() const noexcept
Get the track alias.
Definition subscribe_track_handler.h:166
void SetTrackAlias(uint64_t track_alias)
Set the track alias.
Definition subscribe_track_handler.h:157
constexpr messages::SubscriberPriority GetPriority() const noexcept
Get subscription priority.
Definition subscribe_track_handler.h:124
bool IsPublisherInitiated() const noexcept
Check if the subscribe is publisher initiated or not.
Definition subscribe_track_handler.h:289
void RequestNewGroup() noexcept
Generate a new group request for this subscription.
Status
Status codes for the subscribe track.
Definition subscribe_track_handler.h:39
@ kNewGroupRequested
Definition subscribe_track_handler.h:48
@ kSendingUnsubscribe
In this state, callbacks will not be called,.
Definition subscribe_track_handler.h:46
@ kNotConnected
Definition subscribe_track_handler.h:41
@ kPaused
Definition subscribe_track_handler.h:47
@ kPendingResponse
Definition subscribe_track_handler.h:45
@ kNotSubscribed
Definition subscribe_track_handler.h:44
@ kError
Definition subscribe_track_handler.h:42
virtual void PartialObjectReceived(const ObjectHeaders &object_headers, BytesSpan data)
Notification of a partial object received data object.
Definition subscribe_track_handler.h:258
virtual void ObjectReceived(const ObjectHeaders &object_headers, BytesSpan data)
Notification of received [full] data object.
uint64_t current_group_id_
Definition subscribe_track_handler.h:313
static std::shared_ptr< SubscribeTrackHandler > Create(const FullTrackName &full_track_name, messages::SubscriberPriority priority, messages::GroupOrder group_order=messages::GroupOrder::kAscending, messages::FilterType filter_type=messages::FilterType::kLargestObject)
Create shared Subscribe track handler.
Definition subscribe_track_handler.h:95
void SetPriority(uint8_t priority) noexcept
Set the priority of received data.
Definition subscribe_track_handler.h:117
friend class Server
Definition subscribe_track_handler.h:332
virtual void StatusChanged(Status status)
Notification of subscribe status.
Definition subscribe_track_handler.h:270
constexpr messages::GroupOrder GetGroupOrder() const noexcept
Get subscription group order.
Definition subscribe_track_handler.h:132
void SetReceivedTrackAlias(uint64_t track_alias)
Set the received track alias.
Definition subscribe_track_handler.h:174
constexpr void SetLatestLocation(messages::Location new_location) noexcept
Definition subscribe_track_handler.h:144
void Pause() noexcept
Pause receiving data.
SubscribeTrackHandler(const FullTrackName &full_track_name, messages::SubscriberPriority priority, messages::GroupOrder group_order, messages::FilterType filter_type, const std::optional< JoiningFetch > &joining_fetch=std::nullopt, bool publisher_initiated=false)
Subscribe track handler constructor.
Definition subscribe_track_handler.h:71
Definition transport.h:28
std::span< const Byte > BytesSpan
Definition common.h:21
Full track name struct.
Definition track_name.h:260
Attributes to use when subscribing with a Joining Fetch.
Definition subscribe_track_handler.h:55
const bool absolute
Definition subscribe_track_handler.h:60
const messages::Parameters parameters
Definition subscribe_track_handler.h:58
const messages::GroupOrder group_order
Definition subscribe_track_handler.h:57
const messages::GroupId joining_start
Definition subscribe_track_handler.h:59
const messages::SubscriberPriority priority
Definition subscribe_track_handler.h:56