cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

refactor(portal): delegate frame acknowledgements

Dami committed bc8f8b6
commit
bc8f8b60de00154f0fea0fe80b8d634e69d9a842
parent
cd9cb2e2666b8f000c551e670f088462ca3fc0d5
author
Dami <dami.etoile@gmail.com>
2 files changed, +24 -15
Msrc-tauri/src/commands/network.rs16++--------------
Msrc-tauri/src/media/frame_channel.rs23++++++++++++++++++++++-
M src-tauri/src/commands/network.rs +2 -14
M src-tauri/src/media/frame_channel.rs +22 -1
@@ -4,6 +4,8 @@ use serde::Serialize;
44 use sigil_protocol::{MAX_MEDIA_PAYLOAD_LEN, MAX_VIDEO_DIMENSION, MAX_VIDEO_PIXELS};55 use tauri::{AppHandle, Emitter};66 7+use crate::commands::state::AppState;8+79 pub(crate) fn byte_to_codec(value: u8) -> &'static str {810 match value {911 1 => "h264",
@@ -204,7 +206,7 @@ pub(crate) fn release_frame_channel_slot(in_flight: &AtomicUsize) {
204206 });205207 }206208 207-pub(crate) fn release_frame_channel_slot_for_generation(209+fn release_frame_channel_slot_for_generation(208210 in_flight: &AtomicUsize,209211 current_generation: u64,210212 generation: u64,
@@ -216,6 +218,25 @@ pub(crate) fn release_frame_channel_slot_for_generation(
216218 true217219 }218220 221+pub(crate) async fn acknowledge_frame_delivery(222+ state: &AppState,223+ generation: u64,224+) -> Result<bool, String> {225+ // Serialize selection of the generation-owned counter against connect and226+ // disconnect. Each media task keeps its own counter, so an old callback can227+ // never consume a permit reserved by a replacement session.228+ let _connection_serial = state.client_connection_serial.lock().await;229+ let delivery = state.frame_delivery.lock().await;230+ let Some((current_generation, in_flight)) = delivery.as_ref() else {231+ return Ok(false);232+ };233+ Ok(release_frame_channel_slot_for_generation(234+ in_flight,235+ *current_generation,236+ generation,237+ ))238+}239+219240 pub(crate) fn next_media_generation(counter: &AtomicU64) -> Result<u64, String> {220241 counter221242 .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current| {