use clap::Parser; use ringbuf::{HeapRb, wrap::caching::Caching}; use ropus::Decoder; use rubato::Fft; use shared::AudioStreamInfo; use std::{ collections::HashMap, sync::{Arc, Mutex, RwLock}, }; use tokio::net::UdpSocket; #[derive(Parser)] #[command(version, about)] pub struct CliArgs { #[arg(short, long, required(false))] pub connect_with_defaults: Option, #[arg(short, long, required(false))] pub server_ip: Option, } #[derive(Debug, Clone, Copy)] pub enum TuiScreen { DeviceSelect, Blank, Exit, } #[allow(dead_code)] #[derive(Clone)] pub enum ClientEvent { NewConnection, NewAudioStreamRequest(AudioStreamInfo), NewAudioStreamAccepted(u8), } pub struct ClientInfo { pub client_id: u32, pub server_address: String, pub connected: bool, } pub type AudioStreamKey = (u32, u8); pub type InputAudioStreamsProducers = HashMap>, true, false>>; pub type InputAudioStreamsConsumers = Arc>, false, true>>>>; pub type InputAudioStreamsDecoders = HashMap; pub type InputAudioStreamsResamplers = HashMap>; pub type InputAudioStreamsInfo = Arc>>; pub struct AudioControl { pub active_input_audio_streams_info: InputAudioStreamsInfo, pub udp_socket: Arc, }