diff options
| author | Eskil Q <eskilq@kth.se> | 2021-01-01 14:31:08 +0100 |
|---|---|---|
| committer | Eskil Q <eskilq@kth.se> | 2021-01-01 14:31:08 +0100 |
| commit | 53d1c82eb81b0acb696d2d60ecb8db3fab488105 (patch) | |
| tree | c62d48474596a3ab34bef400c1a2291bfe73b000 /mumd/src/network/tcp.rs | |
| parent | 9777219aa26dc64c0a3dc3d9d2023b8a1c4295fb (diff) | |
| parent | 4613c6b269d7842645d050bb3482cf7efcfa1946 (diff) | |
| download | mum-53d1c82eb81b0acb696d2d60ecb8db3fab488105.tar.gz | |
Merge branch 'main' into noise-gate
Diffstat (limited to 'mumd/src/network/tcp.rs')
| -rw-r--r-- | mumd/src/network/tcp.rs | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/mumd/src/network/tcp.rs b/mumd/src/network/tcp.rs index b1743c8..3c96ee1 100644 --- a/mumd/src/network/tcp.rs +++ b/mumd/src/network/tcp.rs @@ -17,7 +17,7 @@ use std::sync::{Arc, Mutex}; use tokio::net::TcpStream; use tokio::sync::{mpsc, oneshot, watch}; use tokio::time::{self, Duration}; -use tokio_tls::{TlsConnector, TlsStream}; +use tokio_native_tls::{TlsConnector, TlsStream}; use tokio_util::codec::{Decoder, Framed}; type TcpSender = SplitSink< @@ -48,16 +48,13 @@ pub async fn handle( mut tcp_event_register_receiver: mpsc::UnboundedReceiver<(TcpEvent, TcpEventCallback)>, ) { loop { - let connection_info = loop { - match connection_info_receiver.recv().await { - None => { - return; - } - Some(None) => {} - Some(Some(connection_info)) => { - break connection_info; + let connection_info = 'data: loop { + while connection_info_receiver.changed().await.is_ok() { + if let Some(data) = connection_info_receiver.borrow().clone() { + break 'data data; } } + return; }; let (mut sink, stream) = connect( connection_info.socket_addr, @@ -164,9 +161,6 @@ async fn send_packets( sink.borrow_mut().send(packet).await.unwrap(); }, || async { - //clears queue of remaining packets - while packet_receiver.borrow_mut().try_recv().is_ok() {} - sink.borrow_mut().close().await.unwrap(); }, phase_watcher, @@ -215,7 +209,7 @@ async fn listen( } ControlPacket::ServerSync(msg) => { info!("Logged in"); - if let Some(mut sender) = crypt_state_sender.borrow_mut().take() { + if let Some(sender) = crypt_state_sender.borrow_mut().take() { let _ = sender .send( crypt_state @@ -323,10 +317,12 @@ async fn run_until_disconnection<T, F, G, H>( { let (tx, rx) = oneshot::channel(); let phase_transition_block = async { - while !matches!( - phase_watcher.recv().await.unwrap(), - StatePhase::Disconnected - ) {} + loop { + phase_watcher.changed().await.unwrap(); + if matches!(*phase_watcher.borrow(), StatePhase::Disconnected) { + break; + } + } tx.send(true).unwrap(); }; |
