Restore operation of chat_client_bin after draft-05 update. (1) Add an MoqtKnownTrackPublisher and register it with the session. (2) Fix a problem with CATALOG updates. (3) A boolean in IsSyncing() was flipped in the update. PiperOrigin-RevId: 657617107
diff --git a/quiche/quic/moqt/tools/chat_client_bin.cc b/quiche/quic/moqt/tools/chat_client_bin.cc index 5792b87..f2225b6 100644 --- a/quiche/quic/moqt/tools/chat_client_bin.cc +++ b/quiche/quic/moqt/tools/chat_client_bin.cc
@@ -8,6 +8,7 @@ #include <cstdint> #include <fstream> #include <iostream> +#include <list> #include <memory> #include <optional> #include <sstream> @@ -25,6 +26,7 @@ #include "quiche/quic/core/quic_default_clock.h" #include "quiche/quic/core/quic_server_id.h" #include "quiche/quic/core/quic_time.h" +#include "quiche/quic/moqt/moqt_known_track_publisher.h" #include "quiche/quic/moqt/moqt_messages.h" #include "quiche/quic/moqt/moqt_outgoing_queue.h" #include "quiche/quic/moqt/moqt_priority.h" @@ -118,7 +120,7 @@ bool session_is_open() const { return session_is_open_; } bool is_syncing() const { return !catalog_group_.has_value() || subscribes_to_make_ > 0 || - (queue_ != nullptr && queue_->HasSubscribers()); + (queue_ == nullptr || !queue_->HasSubscribers()); } void RunEventLoop() { @@ -205,6 +207,8 @@ queue_ = std::make_shared<moqt::MoqtOutgoingQueue>( client_->session(), my_track_name_, moqt::MoqtForwardingPreference::kObject); + publisher_.Add(queue_); + session_->set_publisher(&publisher_); moqt::MoqtOutgoingAnnounceCallback announce_callback = [&](absl::string_view track_namespace, std::optional<moqt::MoqtAnnounceErrorReason> reason) { @@ -314,11 +318,9 @@ } } if (object_sequence == 0) { // Eliminate users that are no longer present - for (const auto& it : other_users_) { - if (it.second.from_group != group_sequence) { - other_users_.erase(it.first); - } - } + absl::erase_if(other_users_, [&](const auto& kv) { + return kv.second.from_group != group_sequence; + }); } catalog_group_ = group_sequence; } @@ -339,6 +341,7 @@ std::unique_ptr<quic::QuicEventLoop> event_loop_; bool session_is_open_ = false; moqt::MoqtSession* session_ = nullptr; + moqt::MoqtKnownTrackPublisher publisher_; std::unique_ptr<moqt::MoqtClient> client_; moqt::MoqtSessionCallbacks session_callbacks_;