improve loop management (#1047)

* improve loop management

* more
This commit is contained in:
Logan McNaughton
2026-06-09 18:56:56 +02:00
committed by GitHub
parent 0deb1d11fc
commit d589d8bac2
+16 -6
View File
@@ -111,7 +111,6 @@ fn setup_create_window(
let weak = app.as_weak();
app.on_netplay_create_session(
move |session_name, player_name, game_name, game_hash, game_cheats, password| {
let _ = netplay_write_sender.send(None); // close current websocket if any
manage_websocket(
netplay_read_sender.clone(),
netplay_write_receiver.resubscribe(),
@@ -394,9 +393,6 @@ fn update_ping(
let mut write_clone = write.clone();
tokio::spawn(async move {
loop {
if close_ping_rx.try_recv().is_ok() {
break;
}
socket.update_peers();
for peer in socket.connected_peers() {
let now = std::time::SystemTime::now()
@@ -410,7 +406,22 @@ fn update_ping(
let data = postcard::to_stdvec(&ping_message).unwrap();
let _ = write.send((peer, data.into())).await;
}
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
tokio::select! {
result = close_ping_rx.recv() => {
match result {
Ok(()) => {
break;
}
Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => {
panic!("close_ping_rx lagged");
}
Err(tokio::sync::broadcast::error::RecvError::Closed) => {
break;
}
}
}
_ = tokio::time::sleep(std::time::Duration::from_secs(1)) => {}
}
}
socket.close();
});
@@ -626,7 +637,6 @@ fn setup_join_window(
netplay_write_receiver: tokio::sync::broadcast::Receiver<Option<NetplayLobbyMessage>>,
close_ping_rx: tokio::sync::broadcast::Receiver<()>,
) {
let _ = netplay_write_sender.send(None); // close current websocket if any
manage_websocket(
netplay_read_sender.clone(),
netplay_write_receiver.resubscribe(),