rust/hedgewars-server/src/server/handlers/lobby.rs
changeset 14804 b3adc030104b
parent 14803 50fcef24003f
child 14806 a1077e8d26f4
--- 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());
         }