rust/hedgewars-server/src/protocol/messages.rs
changeset 15112 6a1ba3540fa0
parent 15111 1e45db229f9f
child 15124 824472aa4d97
--- a/rust/hedgewars-server/src/protocol/messages.rs	Mon Jun 03 23:50:26 2019 +0300
+++ b/rust/hedgewars-server/src/protocol/messages.rs	Tue Jun 04 01:32:08 2019 +0300
@@ -173,17 +173,32 @@
 
 impl ServerVar {
     pub fn to_protocol(&self) -> Vec<String> {
+        use ServerVar::*;
         match self {
-            ServerVar::MOTDNew(s) => vec!["MOTD_NEW".to_string(), s.clone()],
-            ServerVar::MOTDOld(s) => vec!["MOTD_OLD".to_string(), s.clone()],
-            ServerVar::LatestProto(n) => vec!["LATEST_PROTO".to_string(), n.to_string()],
+            MOTDNew(s) => vec!["MOTD_NEW".to_string(), s.clone()],
+            MOTDOld(s) => vec!["MOTD_OLD".to_string(), s.clone()],
+            LatestProto(n) => vec!["LATEST_PROTO".to_string(), n.to_string()],
+        }
+    }
+}
+
+impl VoteType {
+    pub fn to_protocol(&self) -> Vec<String> {
+        use VoteType::*;
+        match self {
+            Kick(nick) => vec!["KICK".to_string(), nick.clone()],
+            Map(None) => vec!["MAP".to_string()],
+            Map(Some(name)) => vec!["MAP".to_string(), name.clone()],
+            Pause => vec!["PAUSE".to_string()],
+            NewSeed => vec!["NEWSEED".to_string()],
+            HedgehogsPerTeam(count) => vec!["HEDGEHOGS".to_string(), count.to_string()],
         }
     }
 }
 
 impl GameCfg {
     pub fn to_protocol(&self) -> (String, Vec<String>) {
-        use crate::core::types::GameCfg::*;
+        use GameCfg::*;
         match self {
             FeatureSize(s) => ("FEATURE_SIZE".to_string(), vec![s.to_string()]),
             MapType(t) => ("MAP".to_string(), vec![t.to_string()]),
@@ -325,7 +340,6 @@
             StartGame => msg!["START_GAME"],
             EngineMessage(msg) => msg!["EM", msg],
             RoundFinished => msg!["ROUNDFINISHED"],
-            ReplayStart => msg!["REPLAY_START"],
             ToggleRestrictJoin => msg!["TOGGLE_RESTRICT_JOINS"],
             ToggleRestrictTeams => msg!["TOGGLE_RESTRICT_TEAMS"],
             ToggleRegisteredOnly => msg!["TOGGLE_REGISTERED_ONLY"],
@@ -337,7 +351,10 @@
             Unfix => msg!["CMD", "UNFIX"],
             Greeting(None) => msg!["CMD", "GREETING"],
             Greeting(Some(msg)) => msg!["CMD", format!("GREETING {}", msg)],
-            //CallVote(Option<(String, Option<String>)>) =>, ??
+            CallVote(None) => msg!["CMD", "CALLVOTE"],
+            CallVote(Some(vote)) => {
+                msg!["CMD", format!("CALLVOTE {}", &vote.to_protocol().join(" "))]
+            }
             Vote(msg) => msg!["CMD", format!("VOTE {}", if *msg { "YES" } else { "NO" })],
             ForceVote(msg) => msg!["CMD", format!("FORCE {}", if *msg { "YES" } else { "NO" })],
             Save(name, location) => msg!["CMD", format!("SAVE {} {}", name, location)],
@@ -400,6 +417,7 @@
             Notice(msg) => msg!["NOTICE", msg],
             Warning(msg) => msg!["WARNING", msg],
             Error(msg) => msg!["ERROR", msg],
+            ReplayStart => msg!["REPLAY_START"],
 
             LegacyReady(is_ready, nicks) => {
                 construct_message(&[if *is_ready { "READY" } else { "NOT_READY" }], &nicks)