aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/network.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-30 16:15:53 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-03-30 16:15:53 +0200
commit1d331f0707eaa4a056aa6261410fb1edb63097b7 (patch)
tree3beca0c239306bd1ed6f9ee792abd5a855e190f7 /mumd/src/network.rs
parent79702d18bbd23df2faf0c00b0d9537ce26508f6b (diff)
downloadmum-1d331f0707eaa4a056aa6261410fb1edb63097b7.tar.gz
report tcp errors all the way
Diffstat (limited to 'mumd/src/network.rs')
-rw-r--r--mumd/src/network.rs19
1 files changed, 11 insertions, 8 deletions
diff --git a/mumd/src/network.rs b/mumd/src/network.rs
index 38a97ce..4eca90d 100644
--- a/mumd/src/network.rs
+++ b/mumd/src/network.rs
@@ -4,7 +4,7 @@ pub mod udp;
use futures_util::FutureExt;
use log::*;
use std::{future::Future, net::SocketAddr};
-use tokio::{join, select, sync::{oneshot, watch}};
+use tokio::{select, sync::{oneshot, watch}};
use crate::state::StatePhase;
@@ -31,12 +31,12 @@ pub enum VoiceStreamType {
UDP,
}
-async fn run_until<F>(
+async fn run_until<F, R>(
phase_checker: impl Fn(StatePhase) -> bool,
fut: F,
mut phase_watcher: watch::Receiver<StatePhase>,
-) where
- F: Future<Output = ()>,
+) -> Option<R>
+ where F: Future<Output = R>,
{
let (tx, rx) = oneshot::channel();
let phase_transition_block = async {
@@ -55,10 +55,13 @@ async fn run_until<F>(
let rx = rx.fuse();
let fut = fut.fuse();
select! {
- _ = fut => (),
- _ = rx => (),
- };
+ r = fut => Some(r),
+ _ = rx => None,
+ }
};
- join!(main_block, phase_transition_block);
+ select! {
+ m = main_block => m,
+ _ = phase_transition_block => None,
+ }
}