cat / goq
clone

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

fix/drop-hero-notarization-note
goq / src-tauri / src / commands / network.rs
network.rs 5.3K
1use super::state::AppState;2pub use crate::media::adaptive_feedback::ClientMediaFeedbackReport;3use crate::media::adaptive_feedback::send_media_feedback;4use crate::media::audio_delivery;5pub use crate::media::connect::ConnectResult;6use crate::media::connect::{connect_client, disconnect_client};7use crate::media::frame_channel::acknowledge_frame_delivery;8use crate::media::input_delivery::PointerFeedbackPayload;9use crate::media::input_delivery::send_input;10use crate::media::input_delivery::{InputAvailability, start_focused_input_v2};11use crate::media::media_control::request_keyframe;12use crate::media::session_control::send_focus_command;13use sigil_protocol::{FocusCommandActionV2, InputEvent};14use tauri::{15 AppHandle, State,16 ipc::{Channel, Response},17};1819// ─── Client commands ──────────────────────────────────────────────────────────2021#[tauri::command]22pub async fn iroh_client_connect(23 app: AppHandle,24 state: State<'_, AppState>,25 pin: String,26 frame_channel: Channel<Response>,27 audio_channel: Channel<Response>,28 pointer_channel: Channel<PointerFeedbackPayload>,29 audio_supported: bool,30) -> Result<ConnectResult, String> {31 connect_client(32 app,33 &state,34 pin,35 frame_channel,36 audio_channel,37 pointer_channel,38 audio_supported,39 )40 .await41}4243#[tauri::command]44pub async fn iroh_client_send_input(45 state: State<'_, AppState>,46 event: InputEvent,47) -> Result<bool, String> {48 send_input(&state, event).await49}5051#[tauri::command]52pub async fn iroh_client_request_focus(53 state: State<'_, AppState>,54 generation: u64,55 request_id: u64,56 expected_revision: u64,57) -> Result<bool, String> {58 send_focus_command(59 &state.session_control,60 generation,61 request_id,62 FocusCommandActionV2::Request,63 expected_revision,64 None,65 None,66 )67 .await68}6970#[tauri::command]71pub async fn iroh_client_release_focus(72 state: State<'_, AppState>,73 generation: u64,74 request_id: u64,75 expected_revision: u64,76 expected_focus_generation: u64,77) -> Result<bool, String> {78 send_focus_command(79 &state.session_control,80 generation,81 request_id,82 FocusCommandActionV2::Release,83 expected_revision,84 Some(expected_focus_generation),85 None,86 )87 .await88}8990#[tauri::command]91pub async fn iroh_client_approve_focus(92 state: State<'_, AppState>,93 generation: u64,94 request_id: u64,95 expected_revision: u64,96 expected_focus_generation: u64,97 expected_proposal_id: u64,98) -> Result<bool, String> {99 send_focus_command(100 &state.session_control,101 generation,102 request_id,103 FocusCommandActionV2::Approve,104 expected_revision,105 Some(expected_focus_generation),106 Some(expected_proposal_id),107 )108 .await109}110111#[tauri::command]112pub async fn iroh_client_deny_focus(113 state: State<'_, AppState>,114 generation: u64,115 request_id: u64,116 expected_revision: u64,117 expected_focus_generation: u64,118 expected_proposal_id: u64,119) -> Result<bool, String> {120 send_focus_command(121 &state.session_control,122 generation,123 request_id,124 FocusCommandActionV2::Deny,125 expected_revision,126 Some(expected_focus_generation),127 Some(expected_proposal_id),128 )129 .await130}131132#[tauri::command]133pub async fn iroh_client_preempt_focus(134 state: State<'_, AppState>,135 generation: u64,136 request_id: u64,137 expected_revision: u64,138 expected_focus_generation: u64,139) -> Result<bool, String> {140 send_focus_command(141 &state.session_control,142 generation,143 request_id,144 FocusCommandActionV2::Preempt,145 expected_revision,146 Some(expected_focus_generation),147 None,148 )149 .await150}151152#[tauri::command]153pub async fn iroh_client_start_focused_input(154 state: State<'_, AppState>,155) -> Result<InputAvailability, String> {156 start_focused_input_v2(&state).await157}158159#[tauri::command]160pub async fn iroh_client_request_keyframe(161 state: State<'_, AppState>,162 generation: u64,163 reason: String,164) -> Result<bool, String> {165 request_keyframe(&state, generation, reason).await166}167168#[tauri::command]169pub async fn iroh_client_send_media_feedback(170 state: State<'_, AppState>,171 generation: u64,172 report: ClientMediaFeedbackReport,173) -> Result<bool, String> {174 send_media_feedback(&state, generation, report).await175}176177#[tauri::command]178pub async fn iroh_client_ack_frame(179 state: State<'_, AppState>,180 generation: u64,181) -> Result<bool, String> {182 acknowledge_frame_delivery(&state, generation).await183}184185#[tauri::command]186pub fn iroh_client_ack_audio(187 state: State<'_, AppState>,188 generation: u64,189 delivery_id: u64,190) -> Result<bool, String> {191 audio_delivery::iroh_client_ack_audio(state, generation, delivery_id)192}193194#[tauri::command]195pub async fn iroh_client_stop_audio(196 state: State<'_, AppState>,197 expected_generation: u64,198) -> Result<bool, String> {199 audio_delivery::iroh_client_stop_audio(state, expected_generation).await200}201202#[tauri::command]203pub async fn iroh_client_disconnect(state: State<'_, AppState>) -> Result<bool, String> {204 disconnect_client(&state).await205}