2026-04-13 02:52:32 -03:00
|
|
|
#![cfg_attr(coverage, allow(unused_imports))]
|
2026-04-23 07:00:06 -03:00
|
|
|
//! Client relay orchestration for HID input, media downlinks, and webcam/mic uplinks.
|
2025-06-17 20:54:31 -05:00
|
|
|
|
2025-06-11 00:37:01 -05:00
|
|
|
use anyhow::Result;
|
2025-06-30 19:41:35 -05:00
|
|
|
use std::sync::Arc;
|
2026-04-17 04:35:41 -03:00
|
|
|
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
2026-04-21 12:46:47 -03:00
|
|
|
use std::time::{Duration, Instant};
|
2026-04-08 20:00:14 -03:00
|
|
|
use tokio::sync::{broadcast, mpsc};
|
2026-04-16 12:58:05 -03:00
|
|
|
use tokio_stream::{
|
|
|
|
|
StreamExt,
|
|
|
|
|
wrappers::{BroadcastStream, errors::BroadcastStreamRecvError},
|
|
|
|
|
};
|
2025-12-01 11:38:51 -03:00
|
|
|
use tonic::{Request, transport::Channel};
|
|
|
|
|
use tracing::{debug, error, info, trace, warn};
|
2025-06-24 23:48:06 -05:00
|
|
|
use winit::{
|
2025-06-26 17:26:28 -05:00
|
|
|
event::Event,
|
2025-12-01 11:38:51 -03:00
|
|
|
event_loop::{ControlFlow, EventLoopBuilder},
|
2025-06-25 09:21:39 -05:00
|
|
|
platform::wayland::EventLoopBuilderExtWayland,
|
2025-06-24 23:48:06 -05:00
|
|
|
};
|
2025-06-15 20:19:27 -05:00
|
|
|
|
2025-06-26 17:26:28 -05:00
|
|
|
use lesavka_common::lesavka::{
|
2026-04-24 00:30:07 -03:00
|
|
|
Empty, KeyboardReport, MonitorRequest, MouseReport, VideoPacket, relay_client::RelayClient,
|
2025-06-26 17:26:28 -05:00
|
|
|
};
|
2025-06-17 08:17:23 -05:00
|
|
|
|
2026-04-14 02:34:14 -03:00
|
|
|
#[cfg(not(coverage))]
|
|
|
|
|
use crate::output::video::{MonitorWindow, UnifiedMonitorWindow};
|
2025-12-01 11:38:51 -03:00
|
|
|
use crate::{
|
2026-04-10 15:56:18 -03:00
|
|
|
app_support, handshake, input::camera::CameraCapture, input::inputs::InputAggregator,
|
2026-04-30 08:16:57 -03:00
|
|
|
input::microphone::MicrophoneCapture, output::audio::AudioOut, paste, relay_transport,
|
2025-12-01 11:38:51 -03:00
|
|
|
};
|
2025-06-08 04:11:58 -05:00
|
|
|
|
2025-06-23 07:18:26 -05:00
|
|
|
pub struct LesavkaClientApp {
|
2025-06-11 00:37:01 -05:00
|
|
|
aggregator: Option<InputAggregator>,
|
2025-06-08 04:11:58 -05:00
|
|
|
server_addr: String,
|
2025-06-08 13:11:31 -05:00
|
|
|
dev_mode: bool,
|
2026-02-02 15:15:45 -03:00
|
|
|
headless: bool,
|
2025-06-17 08:17:23 -05:00
|
|
|
kbd_tx: broadcast::Sender<KeyboardReport>,
|
|
|
|
|
mou_tx: broadcast::Sender<MouseReport>,
|
2026-04-08 20:00:14 -03:00
|
|
|
paste_rx: Option<mpsc::UnboundedReceiver<String>>,
|
2026-04-17 04:35:41 -03:00
|
|
|
remote_capture_enabled: Arc<AtomicBool>,
|
2025-06-08 04:11:58 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-23 07:00:06 -03:00
|
|
|
include!("app/session_lifecycle.rs");
|
|
|
|
|
include!("app/input_streams.rs");
|
|
|
|
|
include!("app/downlink_media.rs");
|
|
|
|
|
include!("app/uplink_media.rs");
|
2025-06-15 20:19:27 -05:00
|
|
|
|
2026-04-23 07:00:06 -03:00
|
|
|
include!("app/audio_recovery_config.rs");
|