diff -r 96e438b114f0 -r 61a0bd0bb021 rust/hedgewars-server/src/handlers.rs --- a/rust/hedgewars-server/src/handlers.rs Tue Oct 01 23:53:09 2019 +0300 +++ b/rust/hedgewars-server/src/handlers.rs Fri Oct 04 23:23:35 2019 +0300 @@ -9,6 +9,7 @@ use self::{ actions::{Destination, DestinationGroup, PendingMessage}, inanteroom::LoginResult, + strings::*, }; use crate::{ core::{ @@ -166,6 +167,11 @@ } #[inline] + pub fn error(&mut self, message: &str) { + self.add(Error(message.to_string()).send_self()); + } + + #[inline] pub fn request_io(&mut self, task: IoTask) { self.io_tasks.push(task) } @@ -246,7 +252,7 @@ LoginResult::Complete => { if let Some(client) = server.anteroom.remove_client(client_id) { server.add_client(client_id, client); - common::join_lobby(server, response); + common::get_lobby_join_data(server, response); } } LoginResult::Exit => { @@ -268,7 +274,7 @@ let master_sign = if client.is_master() { "+" } else { "" }; let room_info = match client.room_id { Some(room_id) => { - let room = &server.rooms[room_id]; + let room = server.room(room_id); let status = match room.game_info { Some(_) if client.teams_in_game == 0 => "(spectating)", Some(_) => "(playing)", @@ -290,37 +296,36 @@ ]; response.add(Info(info).send_self()) } else { - response - .add(server_chat("Player is not online.".to_string()).send_self()) + response.add(server_chat(USER_OFFLINE.to_string()).send_self()) } } HwProtocolMessage::ToggleServerRegisteredOnly => { - if !server.clients[client_id].is_admin() { - response.add(Warning("Access denied.".to_string()).send_self()); + if !server.is_admin(client_id) { + response.warn(ACCESS_DENIED); } else { - server.set_is_registered_only(server.is_registered_only()); + server.set_is_registered_only(!server.is_registered_only()); let msg = if server.is_registered_only() { - "This server no longer allows unregistered players to join." + REGISTERED_ONLY_ENABLED } else { - "This server now allows unregistered players to join." + REGISTERED_ONLY_DISABLED }; response.add(server_chat(msg.to_string()).send_all()); } } HwProtocolMessage::Global(msg) => { - if !server.clients[client_id].is_admin() { - response.add(Warning("Access denied.".to_string()).send_self()); + if !server.is_admin(client_id) { + response.warn(ACCESS_DENIED); } else { response.add(global_chat(msg).send_all()) } } HwProtocolMessage::SuperPower => { - if !server.clients[client_id].is_admin() { - response.add(Warning("Access denied.".to_string()).send_self()); + let client = server.client_mut(client_id); + if !client.is_admin() { + response.warn(ACCESS_DENIED); } else { - server.clients[client_id].set_has_super_power(true); - response - .add(server_chat("Super power activated.".to_string()).send_self()) + client.set_has_super_power(true); + response.add(server_chat(SUPER_POWER.to_string()).send_self()) } } HwProtocolMessage::Watch(id) => { @@ -331,13 +336,10 @@ #[cfg(not(feature = "official-server"))] { - response.add( - Warning("This server does not support replays!".to_string()) - .send_self(), - ); + response.warn(REPLAY_NOT_SUPPORTED); } } - _ => match server.clients[client_id].room_id { + _ => match server.client(client_id).room_id { None => inlobby::handle(server, client_id, response, message), Some(room_id) => { inroom::handle(server, client_id, response, room_id, message) @@ -380,38 +382,35 @@ match io_result { IoResult::AccountRegistered(is_registered) => { if !is_registered && server.is_registered_only() { - response.add( - Bye("This server only allows registered users to join.".to_string()) - .send_self(), - ); + response.add(Bye(REGISTRATION_REQUIRED.to_string()).send_self()); response.remove_client(client_id); } else if is_registered { let salt = server.anteroom.clients[client_id].server_salt.clone(); response.add(AskPassword(salt).send_self()); } else if let Some(client) = server.anteroom.remove_client(client_id) { server.add_client(client_id, client); - common::join_lobby(server, response); + common::get_lobby_join_data(server, response); } } IoResult::Account(Some(info)) => { response.add(ServerAuth(format!("{:x}", info.server_hash)).send_self()); - if let Some(client) = server.anteroom.remove_client(client_id) { + if let Some(mut client) = server.anteroom.remove_client(client_id) { + client.is_registered = info.is_registered; + client.is_admin = info.is_admin; + client.is_contributor = info.is_contributor; server.add_client(client_id, client); - let client = &mut server.clients[client_id]; - client.set_is_registered(info.is_registered); - client.set_is_admin(info.is_admin); - client.set_is_contributor(info.is_contributor); - common::join_lobby(server, response); + common::get_lobby_join_data(server, response); } } IoResult::Account(None) => { - response.add(Error("Authentication failed.".to_string()).send_self()); + response.error(AUTHENTICATION_FAILED); response.remove_client(client_id); } IoResult::Replay(Some(replay)) => { - let protocol = server.clients[client_id].protocol_number; + let client = server.client(client_id); + let protocol = client.protocol_number; let start_msg = if protocol < 58 { - RoomJoined(vec![server.clients[client_id].nick.clone()]) + RoomJoined(vec![client.nick.clone()]) } else { ReplayStart }; @@ -427,32 +426,27 @@ } } IoResult::Replay(None) => { - response.add(Warning("Could't load the replay".to_string()).send_self()) + response.warn(REPLAY_LOAD_FAILED); } IoResult::SaveRoom(_, true) => { - response.add(server_chat("Room configs saved successfully.".to_string()).send_self()); + response.add(server_chat(ROOM_CONFIG_SAVED.to_string()).send_self()); } IoResult::SaveRoom(_, false) => { - response.add(Warning("Unable to save the room configs.".to_string()).send_self()); + response.warn(ROOM_CONFIG_SAVE_FAILED); } IoResult::LoadRoom(room_id, Some(contents)) => { if let Some(ref mut room) = server.rooms.get_mut(room_id) { match room.set_saves(&contents) { - Ok(_) => response.add( - server_chat("Room configs loaded successfully.".to_string()).send_self(), - ), + Ok(_) => response.add(server_chat(ROOM_CONFIG_LOADED.to_string()).send_self()), Err(e) => { warn!("Error while deserializing the room configs: {}", e); - response.add( - Warning("Unable to deserialize the room configs.".to_string()) - .send_self(), - ); + response.warn(ROOM_CONFIG_DESERIALIZE_FAILED); } } } } IoResult::LoadRoom(_, None) => { - response.add(Warning("Unable to load the room configs.".to_string()).send_self()); + response.warn(ROOM_CONFIG_LOAD_FAILED); } } }