diff --git a/voxygen/src/menu/char_selection/mod.rs b/voxygen/src/menu/char_selection/mod.rs index 3995e241f5..15ccecd63b 100644 --- a/voxygen/src/menu/char_selection/mod.rs +++ b/voxygen/src/menu/char_selection/mod.rs @@ -114,12 +114,9 @@ impl PlayState for CharSelectionState { .tick(comp::ControllerInputs::default(), clock.get_last_delta()) { error!("Failed to tick the scene: {:?}", err); - global_state.info_message = Some( - "Connection lost!\nDid the server restart?\nIs the client up to date?" - .to_owned(), - ); return PlayStateResult::Pop; } + self.client.borrow_mut().cleanup(); // Finish the frame. diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 48a4ee5b62..9df3824b23 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -6,7 +6,7 @@ use crate::{ window::{Event, GameInput}, Direction, Error, GlobalState, PlayState, PlayStateResult, }; -use client::{self, Client, Event::Chat}; +use client::{self, error::Error as ClientError, Client, Event::Chat}; use common::{ clock::Clock, comp, @@ -332,11 +332,20 @@ impl PlayState for SessionState { // Perform an in-game tick. if let Err(err) = self.tick(clock.get_avg_delta()) { - error!("Failed to tick the scene: {:?}", err); - global_state.info_message = Some( - "Connection lost!\nDid the server restart?\nIs the client up to date?" - .to_owned(), - ); + match err { + Error::ClientError(ClientError::ServerTimeout) => { + global_state.info_message = Some( + "Connection lost!\nDid the server restart?\nIs the client up to date?" + .to_owned(), + ); + + error!("[session] ServerTimeout: {:?}", err); + } + _ => { + error!("[session] Failed to tick the scene: {:?}", err); + } + } + return PlayStateResult::Pop; }