send disconnect notice (#1103)

* send disconnect notice

* more

* more

* more

* more
This commit is contained in:
Logan McNaughton
2026-06-20 18:40:56 +02:00
committed by GitHub
parent 6f9801a185
commit d6aa2ddce3
2 changed files with 42 additions and 14 deletions
+30 -7
View File
@@ -105,6 +105,7 @@ fn process_reliable_messages(netplay: &mut Netplay) {
.insert(decoded_message.name, decoded_message.data); .insert(decoded_message.name, decoded_message.data);
netplay.incoming_message.clear(); netplay.incoming_message.clear();
check_input_delay(netplay); check_input_delay(netplay);
check_disconnect(netplay);
} }
} }
} }
@@ -235,6 +236,16 @@ fn check_input_delay(netplay: &mut Netplay) {
} }
} }
fn check_disconnect(netplay: &mut Netplay) {
if !netplay.disconnected && netplay.messages.remove("disconnect").is_some() {
netplay.disconnected = true;
ui::video::onscreen_message(
"Player disconnected, session has ended",
ui::video::MESSAGE_LENGTH_MESSAGE_LONG,
);
}
}
fn pending_frames(netplay: &Netplay) -> usize { fn pending_frames(netplay: &Netplay) -> usize {
netplay netplay
.requests .requests
@@ -289,11 +300,13 @@ fn poll_clients(netplay: &mut Netplay) {
ggrs::GgrsEvent::Synchronizing { .. } => {} ggrs::GgrsEvent::Synchronizing { .. } => {}
ggrs::GgrsEvent::Synchronized { .. } => {} ggrs::GgrsEvent::Synchronized { .. } => {}
ggrs::GgrsEvent::Disconnected { .. } => { ggrs::GgrsEvent::Disconnected { .. } => {
netplay.disconnected = true; if !netplay.disconnected {
ui::video::onscreen_message( netplay.disconnected = true;
"Lost connection to peers", ui::video::onscreen_message(
ui::video::MESSAGE_LENGTH_MESSAGE_LONG, "Lost connection to peer(s)",
); ui::video::MESSAGE_LENGTH_MESSAGE_LONG,
);
}
} }
ggrs::GgrsEvent::NetworkInterrupted { .. } => { ggrs::GgrsEvent::NetworkInterrupted { .. } => {
println!("network interrupted"); println!("network interrupted");
@@ -333,7 +346,8 @@ fn advance_frame(device: &mut device::Device) {
.unwrap(); .unwrap();
// avoid rollback // avoid rollback
while netplay.session.current_frame() > netplay.session.confirmed_frame() while !netplay.disconnected
&& netplay.session.current_frame() > netplay.session.confirmed_frame()
&& netplay.session.confirmed_frame() != ggrs::NULL_FRAME && netplay.session.confirmed_frame() != ggrs::NULL_FRAME
{ {
poll_clients(netplay); poll_clients(netplay);
@@ -542,6 +556,15 @@ pub fn init(
}) })
} }
pub fn close(netplay: &Netplay) { pub fn close(netplay: &mut Netplay) {
if !netplay.disconnected {
let message = NetplayMessage {
name: "disconnect".to_string(),
data: vec![],
};
send_message(netplay, message);
std::thread::sleep(std::time::Duration::from_millis(200)); // give the message time to be sent
}
let _ = std::fs::remove_file(&netplay.ice_config_path); let _ = std::fs::remove_file(&netplay.ice_config_path);
} }
+12 -7
View File
@@ -34,13 +34,18 @@ fn check_latest_version(weak: slint::Weak<AppWindow>) {
if let Ok(response) = response { if let Ok(response) = response {
let data: Result<GithubData, reqwest::Error> = response.json().await; let data: Result<GithubData, reqwest::Error> = response.json().await;
let latest_version = if let Ok(data) = data let latest_version = match data {
&& let Ok(github_version) = semver::Version::parse(&data.tag_name[1..]) Ok(data) => match semver::Version::parse(&data.tag_name[1..]) {
{ Ok(github_version) => github_version,
github_version Err(e) => {
} else { eprintln!("Error parsing latest version from GitHub: {}", e);
eprintln!("Error getting latest version from GitHub"); semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap()
semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() }
},
Err(e) => {
eprintln!("Error getting latest version from GitHub: {}", e);
semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap()
}
}; };
let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap();
if current_version < latest_version { if current_version < latest_version {