diff -r 50fcef24003f -r b3adc030104b rust/hedgewars-server/src/server/handlers/lobby.rs --- a/rust/hedgewars-server/src/server/handlers/lobby.rs Wed Apr 10 16:14:33 2019 +0300 +++ b/rust/hedgewars-server/src/server/handlers/lobby.rs Wed Apr 10 18:12:30 2019 +0300 @@ -5,7 +5,10 @@ protocol::messages::{ add_flags, remove_flags, HWProtocolMessage, HWServerMessage::*, ProtocolFlags as Flags, }, - server::{core::HWServer, coretypes::ClientId}, + server::{ + core::HWServer, + coretypes::{ClientId, ServerVar}, + }, utils::is_name_illegal, }; use log::*; @@ -108,6 +111,32 @@ response.add(Warning("No such room.".to_string()).send_self()); } } + SetServerVar(var) => { + if !server.clients[client_id].is_admin() { + response.add(Warning("Access denied.".to_string()).send_self()); + } else { + match var { + ServerVar::MOTDNew(msg) => server.greetings.for_latest_protocol = msg, + ServerVar::MOTDOld(msg) => server.greetings.for_old_protocols = msg, + ServerVar::LatestProto(n) => server.latest_protocol = n, + } + } + } + GetServerVar => { + if !server.clients[client_id].is_admin() { + response.add(Warning("Access denied.".to_string()).send_self()); + } else { + let vars: Vec<_> = [ + ServerVar::MOTDNew(server.greetings.for_latest_protocol.clone()), + ServerVar::MOTDOld(server.greetings.for_old_protocols.clone()), + ServerVar::LatestProto(server.latest_protocol), + ] + .iter() + .flat_map(|v| v.to_protocol()) + .collect(); + response.add(ServerVars(vars).send_self()); + } + } Rnd(v) => { response.add(rnd_reply(&v).send_self()); }