From e1907114374c842654f86b234b816f57dbbc79d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Tue, 30 Mar 2021 11:21:38 +0200 Subject: add StateError and AudioError --- mumd/src/client.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mumd/src/client.rs') diff --git a/mumd/src/client.rs b/mumd/src/client.rs index cdae7eb..6b66731 100644 --- a/mumd/src/client.rs +++ b/mumd/src/client.rs @@ -8,6 +8,7 @@ use std::sync::Arc; use tokio::{join, sync::{Mutex, mpsc, oneshot, watch}}; pub async fn handle( + state: State, command_receiver: mpsc::UnboundedReceiver<( Command, oneshot::Sender>>, @@ -24,8 +25,8 @@ pub async fn handle( let (response_sender, response_receiver) = mpsc::unbounded_channel(); - let state = State::new(); let state = Arc::new(Mutex::new(state)); + join!( tcp::handle( Arc::clone(&state), -- cgit v1.2.1 From 79702d18bbd23df2faf0c00b0d9537ce26508f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Tue, 30 Mar 2021 14:40:46 +0200 Subject: udp error --- mumd/src/client.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mumd/src/client.rs') diff --git a/mumd/src/client.rs b/mumd/src/client.rs index 6b66731..7c1b0b7 100644 --- a/mumd/src/client.rs +++ b/mumd/src/client.rs @@ -27,7 +27,8 @@ pub async fn handle( let state = Arc::new(Mutex::new(state)); - join!( + //TODO report error here + let (_, _, _, _) = join!( tcp::handle( Arc::clone(&state), connection_info_receiver.clone(), -- cgit v1.2.1 From 1d331f0707eaa4a056aa6261410fb1edb63097b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Tue, 30 Mar 2021 16:15:53 +0200 Subject: report tcp errors all the way --- mumd/src/client.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'mumd/src/client.rs') diff --git a/mumd/src/client.rs b/mumd/src/client.rs index 7c1b0b7..c1a0152 100644 --- a/mumd/src/client.rs +++ b/mumd/src/client.rs @@ -1,11 +1,13 @@ use crate::command; +use crate::error::ClientError; use crate::network::{tcp, udp, ConnectionInfo}; use crate::state::State; +use futures_util::{select, FutureExt}; use mumble_protocol::{Serverbound, control::ControlPacket, crypt::ClientCryptState}; use mumlib::command::{Command, CommandResponse}; use std::sync::Arc; -use tokio::{join, sync::{Mutex, mpsc, oneshot, watch}}; +use tokio::sync::{Mutex, mpsc, oneshot, watch}; pub async fn handle( state: State, @@ -13,7 +15,7 @@ pub async fn handle( Command, oneshot::Sender>>, )>, -) { +) -> Result<(), ClientError> { let (connection_info_sender, connection_info_receiver) = watch::channel::>(None); let (crypt_state_sender, crypt_state_receiver) = @@ -27,29 +29,28 @@ pub async fn handle( let state = Arc::new(Mutex::new(state)); - //TODO report error here - let (_, _, _, _) = join!( - tcp::handle( + select! { + r = tcp::handle( Arc::clone(&state), connection_info_receiver.clone(), crypt_state_sender, packet_sender.clone(), packet_receiver, response_receiver, - ), - udp::handle( + ).fuse() => r.map_err(|e| ClientError::TcpError(e)), + _ = udp::handle( Arc::clone(&state), connection_info_receiver.clone(), crypt_state_receiver, - ), - command::handle( + ).fuse() => Ok(()), + _ = command::handle( state, command_receiver, response_sender, ping_request_sender, packet_sender, connection_info_sender, - ), - udp::handle_pings(ping_request_receiver), - ); + ).fuse() => Ok(()), + _ = udp::handle_pings(ping_request_receiver).fuse() => Ok(()), + } } -- cgit v1.2.1