aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/network/tcp.rs
diff options
context:
space:
mode:
authorEskil Q <eskilq@kth.se>2021-01-01 14:31:08 +0100
committerEskil Q <eskilq@kth.se>2021-01-01 14:31:08 +0100
commit53d1c82eb81b0acb696d2d60ecb8db3fab488105 (patch)
treec62d48474596a3ab34bef400c1a2291bfe73b000 /mumd/src/network/tcp.rs
parent9777219aa26dc64c0a3dc3d9d2023b8a1c4295fb (diff)
parent4613c6b269d7842645d050bb3482cf7efcfa1946 (diff)
downloadmum-53d1c82eb81b0acb696d2d60ecb8db3fab488105.tar.gz
Merge branch 'main' into noise-gate
Diffstat (limited to 'mumd/src/network/tcp.rs')
-rw-r--r--mumd/src/network/tcp.rs30
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();
};