diff --git a/src/trx-client/src/audio_client.rs b/src/trx-client/src/audio_client.rs index 5592289..d19f069 100644 --- a/src/trx-client/src/audio_client.rs +++ b/src/trx-client/src/audio_client.rs @@ -56,7 +56,7 @@ pub async fn run_audio_client( decode_tx: broadcast::Sender, mut shutdown_rx: watch::Receiver, vchan_audio: Arc>>>, - mut vchan_cmd_rx: mpsc::Receiver, + mut vchan_cmd_rx: mpsc::UnboundedReceiver, vchan_destroyed_tx: Option>, ) { let mut reconnect_delay = Duration::from_secs(1); @@ -146,7 +146,7 @@ async fn handle_audio_connection( decode_tx: &broadcast::Sender, shutdown_rx: &mut watch::Receiver, vchan_audio: &Arc>>>, - vchan_cmd_rx: &mut mpsc::Receiver, + vchan_cmd_rx: &mut mpsc::UnboundedReceiver, active_subs: &mut HashMap, vchan_destroyed_tx: &Option>, ) -> std::io::Result<()> { diff --git a/src/trx-client/src/main.rs b/src/trx-client/src/main.rs index 4db46e4..503ff2f 100644 --- a/src/trx-client/src/main.rs +++ b/src/trx-client/src/main.rs @@ -300,7 +300,8 @@ async fn async_init() -> DynResult { frontend_runtime.decode_rx = Some(decode_tx.clone()); // Virtual-channel audio: shared broadcaster map + command channel. - let (vchan_cmd_tx, vchan_cmd_rx) = mpsc::channel::(64); + let (vchan_cmd_tx, vchan_cmd_rx) = + mpsc::unbounded_channel::(); *frontend_runtime.vchan_audio_cmd.lock().unwrap() = Some(vchan_cmd_tx); let (vchan_destroyed_tx, _) = broadcast::channel::(64); diff --git a/src/trx-client/trx-frontend/src/lib.rs b/src/trx-client/trx-frontend/src/lib.rs index 6f8ee83..e8231d5 100644 --- a/src/trx-client/trx-frontend/src/lib.rs +++ b/src/trx-client/trx-frontend/src/lib.rs @@ -252,7 +252,7 @@ pub struct FrontendRuntimeContext { /// Channel to send `VChanAudioCmd` to the audio-client task, which in turn /// forwards `VCHAN_SUB` / `VCHAN_UNSUB` frames over the audio TCP connection. /// `None` when no audio connection is active. - pub vchan_audio_cmd: Arc>>>, + pub vchan_audio_cmd: Arc>>>, /// Broadcast sender that fires whenever the server destroys a virtual /// channel (e.g. out-of-bandwidth after center-frequency retune). /// The HTTP frontend subscribes to clean up `ClientChannelManager`. diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs index c13ed10..c4c4083 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/background_decode.rs @@ -238,7 +238,7 @@ impl BackgroundDecodeManager { fn send_audio_cmd(&self, cmd: VChanAudioCmd) { if let Ok(guard) = self.context.vchan_audio_cmd.lock() { if let Some(tx) = guard.as_ref() { - let _ = tx.try_send(cmd); + let _ = tx.send(cmd); } } } diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/vchan.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/vchan.rs index ba7a0aa..904e6ed 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/vchan.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/vchan.rs @@ -97,7 +97,7 @@ pub struct ClientChannelManager { pub change_tx: broadcast::Sender, pub max_channels: usize, /// Optional sender to the audio-client task for virtual-channel audio commands. - pub audio_cmd: std::sync::Mutex>>, + pub audio_cmd: std::sync::Mutex>>, } impl ClientChannelManager { @@ -114,14 +114,14 @@ impl ClientChannelManager { /// Wire the audio-command sender so the manager can dispatch /// `VChanAudioCmd` messages when channels are allocated/deleted/changed. - pub fn set_audio_cmd(&self, tx: tokio::sync::mpsc::Sender) { + pub fn set_audio_cmd(&self, tx: tokio::sync::mpsc::UnboundedSender) { *self.audio_cmd.lock().unwrap() = Some(tx); } /// Fire-and-forget: send a `VChanAudioCmd` to the audio-client task. fn send_audio_cmd(&self, cmd: VChanAudioCmd) { if let Some(tx) = self.audio_cmd.lock().unwrap().as_ref() { - let _ = tx.try_send(cmd); + let _ = tx.send(cmd); } }