Fix not "disconnecting" on page close/refresh
Hopefully this works this time.
This commit is contained in:
parent
284f294c6d
commit
ee8187cabb
1 changed files with 30 additions and 22 deletions
|
@ -177,28 +177,6 @@ impl Component for MainMenu {
|
|||
.clone()
|
||||
.downcast::<Wrapper>()
|
||||
.send_message(WrapperMsg::BackendTick);
|
||||
// set reset when page "unload"
|
||||
ctx.link()
|
||||
.get_parent()
|
||||
.expect("Wrapper should be a parent of MainMenu")
|
||||
.clone()
|
||||
.downcast::<Wrapper>()
|
||||
.send_future(async {
|
||||
let promise =
|
||||
Promise::new(&mut |resolve: js_sys::Function, _reject| {
|
||||
let window =
|
||||
web_sys::window().expect("Should be able to get window");
|
||||
window
|
||||
.add_event_listener_with_callback("pagehide", &resolve)
|
||||
.expect("Should be able to set \"pagehide\" callback");
|
||||
window
|
||||
.add_event_listener_with_callback("beforeunload", &resolve)
|
||||
.expect("Should be able to set \"beforeunload\" callback");
|
||||
});
|
||||
let js_fut = JsFuture::from(promise);
|
||||
js_fut.await.ok();
|
||||
WrapperMsg::Reset
|
||||
});
|
||||
}
|
||||
_ => {
|
||||
append_to_info_text(
|
||||
|
@ -1238,6 +1216,36 @@ impl Component for Wrapper {
|
|||
log::warn!("{}", string);
|
||||
}
|
||||
BREnum::GotID(id, turn_opt) => {
|
||||
// set reset and disconnect on page "unload"
|
||||
let player_id = id;
|
||||
ctx.link().send_future(async move {
|
||||
let promise =
|
||||
Promise::new(&mut |resolve: js_sys::Function, _reject| {
|
||||
let window =
|
||||
web_sys::window().expect("Should be able to get window");
|
||||
window
|
||||
.add_event_listener_with_callback("pagehide", &resolve)
|
||||
.expect("Should be able to set \"pagehide\" callback");
|
||||
window
|
||||
.add_event_listener_with_callback("beforeunload", &resolve)
|
||||
.expect("Should be able to set \"beforeunload\" callback");
|
||||
});
|
||||
let js_fut = JsFuture::from(promise);
|
||||
js_fut.await.ok();
|
||||
|
||||
let function = Function::new_no_args(&format!(
|
||||
"
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', '{}');
|
||||
xhr.send('{{\"type\": \"disconnect\", \"id\": {}}}');
|
||||
",
|
||||
BACKEND_URL, player_id
|
||||
));
|
||||
function.call0(&function).ok();
|
||||
|
||||
WrapperMsg::Reset
|
||||
});
|
||||
|
||||
self.player_id = Some(id);
|
||||
let mut game_state = shared.game_state.get();
|
||||
game_state.set_networked_paired();
|
||||
|
|
Loading…
Reference in a new issue