gameServer2/src/protocol/messages.rs
changeset 12142 4d7d41be1993
parent 12141 78925eff02c2
child 12145 a482c7a5f6e3
equal deleted inserted replaced
12141:78925eff02c2 12142:4d7d41be1993
     2 use std;
     2 use std;
     3 use std::ops;
     3 use std::ops;
     4 use std::convert::From;
     4 use std::convert::From;
     5 
     5 
     6 #[derive(PartialEq, Debug)]
     6 #[derive(PartialEq, Debug)]
     7 pub enum HWProtocolMessage<'a> {
     7 pub enum HWProtocolMessage {
     8     // core
     8     // core
     9     Ping,
     9     Ping,
    10     Pong,
    10     Pong,
    11     Quit(Option<&'a str>),
    11     Quit(Option<String>),
    12     Bye(&'a str),
    12     //Cmd(String, Vec<String>),
    13     LobbyLeft(&'a str),
    13     Global(String),
    14     //Cmd(&'a str, Vec<&'a str>),
    14     Watch(String),
    15     Global(&'a str),
       
    16     Watch(&'a str),
       
    17     ToggleServerRegisteredOnly,
    15     ToggleServerRegisteredOnly,
    18     SuperPower,
    16     SuperPower,
    19     Info(&'a str),
    17     Info(String),
    20     // not entered state
    18     // not entered state
    21     Nick(&'a str),
    19     Nick(String),
    22     Proto(u32),
    20     Proto(u32),
    23     Password(&'a str, &'a str),
    21     Password(String, String),
    24     Checker(u32, &'a str, &'a str),
    22     Checker(u32, String, String),
    25     // lobby
    23     // lobby
    26     List,
    24     List,
    27     Chat(&'a str),
    25     Chat(String),
    28     CreateRoom(&'a str, Option<&'a str>),
    26     CreateRoom(String, Option<String>),
    29     Join(&'a str, Option<&'a str>),
    27     Join(String, Option<String>),
    30     Follow(&'a str),
    28     Follow(String),
    31     Rnd(Vec<&'a str>),
    29     Rnd(Vec<String>),
    32     Kick(&'a str),
    30     Kick(String),
    33     Ban(&'a str, &'a str, u32),
    31     Ban(String, String, u32),
    34     BanIP(&'a str, &'a str, u32),
    32     BanIP(String, String, u32),
    35     BanNick(&'a str, &'a str, u32),
    33     BanNick(String, String, u32),
    36     BanList,
    34     BanList,
    37     Unban(&'a str),
    35     Unban(String),
    38     SetServerVar(ServerVar),
    36     SetServerVar(ServerVar),
    39     GetServerVar,
    37     GetServerVar,
    40     RestartServer,
    38     RestartServer,
    41     Stats,
    39     Stats,
    42     // in room
    40     // in room
    43     Part(Option<&'a str>),
    41     Part(Option<String>),
    44     Cfg(GameCfg),
    42     Cfg(GameCfg),
    45     AddTeam(TeamInfo),
    43     AddTeam(TeamInfo),
    46     RemoveTeam(&'a str),
    44     RemoveTeam(String),
    47     SetHedgehogsNumber(&'a str, u8),
    45     SetHedgehogsNumber(String, u8),
    48     SetTeamColor(&'a str, u8),
    46     SetTeamColor(String, u8),
    49     ToggleReady,
    47     ToggleReady,
    50     StartGame,
    48     StartGame,
    51     EngineMessage(&'a str),
    49     EngineMessage(String),
    52     RoundFinished,
    50     RoundFinished,
    53     ToggleRestrictJoin,
    51     ToggleRestrictJoin,
    54     ToggleRestrictTeams,
    52     ToggleRestrictTeams,
    55     ToggleRegisteredOnly,
    53     ToggleRegisteredOnly,
    56     RoomName(&'a str),
    54     RoomName(String),
    57     Delegate(&'a str),
    55     Delegate(String),
    58     TeamChat(&'a str),
    56     TeamChat(String),
    59     MaxTeams(u8),
    57     MaxTeams(u8),
    60     Fix,
    58     Fix,
    61     Unfix,
    59     Unfix,
    62     Greeting(&'a str),
    60     Greeting(String),
    63     CallVote(Option<(&'a str, Option<&'a str>)>),
    61     CallVote(Option<(String, Option<String>)>),
    64     Vote(&'a str),
    62     Vote(String),
    65     ForceVote(&'a str),
    63     ForceVote(String),
    66     Save(&'a str, &'a str),
    64     Save(String, String),
    67     Delete(&'a str),
    65     Delete(String),
    68     SaveRoom(&'a str),
    66     SaveRoom(String),
    69     LoadRoom(&'a str),
    67     LoadRoom(String),
    70     Connected(u32),
       
    71     Malformed,
    68     Malformed,
    72     Empty,
    69     Empty,
    73 }
    70 }
    74 
    71 
    75 pub fn number<T: From<u8>
    72 pub enum HWServerMessage<'a> {
    76                 + std::default::Default
    73     Ping,
    77                 + std::ops::MulAssign
    74     Pong,
    78                 + std::ops::AddAssign>
    75     Bye(&'a str),
    79     (digits: Vec<u8>) -> T {
    76     Nick(&'a str),
    80     let mut value: T = T::default();
    77     LobbyLeft(&'a str),
    81     for digit in digits {
    78 
    82         value *= T::from(10);
    79     Connected(u32),
    83         value += T::from(digit);
    80     Unreachable,
    84     }
       
    85     value
       
    86 }
    81 }
    87 
    82 
    88 fn construct_message(msg: & [&str]) -> String {
    83 fn construct_message(msg: & [&str]) -> String {
    89     let mut m = String::with_capacity(64);
    84     let mut m = String::with_capacity(64);
    90 
    85 
    95     m.push('\n');
    90     m.push('\n');
    96 
    91 
    97     m
    92     m
    98 }
    93 }
    99 
    94 
   100 impl<'a> HWProtocolMessage<'a> {
    95 impl<'a> HWServerMessage<'a> {
   101     pub fn to_raw_protocol(&self) -> String {
    96     pub fn to_raw_protocol(&self) -> String {
   102         match self {
    97         match self {
   103             &HWProtocolMessage::Ping
    98             &HWServerMessage::Ping
   104                 => "PING\n\n".to_string(),
    99                 => "PING\n\n".to_string(),
   105             &HWProtocolMessage::Pong
   100             &HWServerMessage::Pong
   106                 => "PONG\n\n".to_string(),
   101                 => "PONG\n\n".to_string(),
   107             &HWProtocolMessage::Connected(protocol_version)
   102             &HWServerMessage::Connected(protocol_version)
   108                 => construct_message(&[
   103                 => construct_message(&[
   109                     "CONNECTED",
   104                     "CONNECTED",
   110                     "Hedgewars server http://www.hedgewars.org/",
   105                     "Hedgewars server http://www.hedgewars.org/",
   111                     &protocol_version.to_string()
   106                     &protocol_version.to_string()
   112                 ]),
   107                 ]),
   113             &HWProtocolMessage::Bye(msg)
   108             &HWServerMessage::Bye(msg)
   114                 => construct_message(&["BYE", msg]),
   109                 => construct_message(&["BYE", &msg]),
   115             &HWProtocolMessage::Nick(nick)
   110             &HWServerMessage::Nick(nick)
   116             => construct_message(&["NICK", nick]),
   111             => construct_message(&["NICK", &nick]),
   117             &HWProtocolMessage::LobbyLeft(msg)
   112             &HWServerMessage::LobbyLeft(msg)
   118                 => construct_message(&["LOBBY_LEFT", msg]),
   113                 => construct_message(&["LOBBY_LEFT", &msg]),
   119             _ => construct_message(&["ERROR", "UNIMPLEMENTED"]),
   114             _ => construct_message(&["ERROR", "UNIMPLEMENTED"]),
   120         }
   115         }
   121     }
   116     }
   122 }
   117 }