From 701755a8e2ce892a7a76a768abeca77cb70f2e87 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Tue, 23 Apr 2019 14:01:16 +0200 Subject: [PATCH] Add disconnect handling Former-commit-id: 24a9d535101f28debc0fe5a0600a32c9b744466f --- client/src/lib.rs | 15 ++++++++++----- common/src/msg/server.rs | 1 + server/src/lib.rs | 5 +---- voxygen/src/session.rs | 3 +++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/client/src/lib.rs b/client/src/lib.rs index 3115da2508..1fc6a8a740 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -24,10 +24,11 @@ const SERVER_TIMEOUT: f64 = 20.0; // Seconds pub enum Event { Chat(String), + Disconnect, } pub struct Client { - client_state: ClientState, + client_state: Option, thread_pool: ThreadPool, last_ping: f64, @@ -45,7 +46,7 @@ impl Client { /// Create a new `Client`. #[allow(dead_code)] pub fn new>(addr: A, view_distance: u64) -> Result { - let mut client_state = ClientState::Connected; + let mut client_state = Some(ClientState::Connected); let mut postbox = PostBox::to(addr)?; // Wait for initial sync @@ -259,13 +260,17 @@ impl Client { self.pending_chunks.remove(&key); } ServerMsg::StateAnswer(Ok(state)) => { - self.client_state = state; + self.client_state = Some(state); } ServerMsg::StateAnswer(Err((error, state))) => { - self.client_state = state; + self.client_state = Some(state); } ServerMsg::ForceState(state) => { - self.client_state = state; + self.client_state = Some(state); + } + ServerMsg::Disconnect => { + self.client_state = None; + frontend_events.push(Event::Disconnect); } } } diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs index 684ddb7cc7..6d174f5c9a 100644 --- a/common/src/msg/server.rs +++ b/common/src/msg/server.rs @@ -40,5 +40,6 @@ pub enum ServerMsg { key: Vec3, chunk: Box, }, + Disconnect, Shutdown, } diff --git a/server/src/lib.rs b/server/src/lib.rs index 082f2ed764..1235b0faec 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -348,10 +348,7 @@ impl Server { if disconnect { disconnected_clients.push(entity); - client.postbox.send_message(ServerMsg::StateAnswer(Err(( - RequestStateError::Impossible, - ClientState::Connected, - )))); + client.postbox.send_message(ServerMsg::Disconnect); true } else { false diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 64273e57c4..3ae0991fec 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -68,6 +68,9 @@ impl SessionState { client::Event::Chat(msg) => { self.hud.new_message(msg); } + client::Event::Disconnect => { + // TODO + } } }