diff --git a/src/game/iter_once.rs b/src/game/iter_once.rs index 85ade39..d372396 100644 --- a/src/game/iter_once.rs +++ b/src/game/iter_once.rs @@ -25,7 +25,7 @@ impl Game { // send everything in the send queue while let Some((token, message, prompt, state)) = send_queue.pop() { // get the client - let client = if let Some(client) = self.clients.get_mut(&token) { + let mut client = if let Some(client) = self.clients.remove(&token) { client } else { // no client, so put the token back and move on @@ -39,12 +39,21 @@ impl Game { client.send_without_prompt(&message); } - if state == Some(State::Quit) { - let _ = client.close(); - log::info!("Disconnect from {}", client); - self.clients.remove(&token); - let _ = self.db.remove_connected_player(token); - self.tokens.push_back(token); + match state { + Some(State::Quit) => { + let _ = client.close(); + log::info!("Disconnect from {}", client); + self.clients.remove(&token); + let _ = self.db.remove_connected_player(token); + self.tokens.push_back(token); + } + Some(state) => { + client.state = state; + self.clients.insert(token, client); + } + _ => { + let _ = self.clients.insert(token, client); + } } }