gameServer2/src/protocol/messages.rs
changeset 13419 81e0ed105f5d
parent 13416 cdf69667593b
child 13422 5fb27f94fc3b
equal deleted inserted replaced
13418:bb24c3414b0d 13419:81e0ed105f5d
    84     RoomAdd(Vec<String>),
    84     RoomAdd(Vec<String>),
    85     RoomJoined(Vec<String>),
    85     RoomJoined(Vec<String>),
    86     RoomLeft(String, String),
    86     RoomLeft(String, String),
    87     RoomRemove(String),
    87     RoomRemove(String),
    88     RoomUpdated(String, Vec<String>),
    88     RoomUpdated(String, Vec<String>),
       
    89     TeamAdd(Vec<String>),
       
    90     TeamRemove(String),
       
    91     TeamAccepted(String),
       
    92     TeamColor(String, u8),
       
    93     HedgehogsNumber(String, u8),
       
    94 
    89     ServerMessage(String),
    95     ServerMessage(String),
    90 
       
    91     Warning(String),
    96     Warning(String),
    92     Error(String),
    97     Error(String),
    93     Connected(u32),
    98     Connected(u32),
    94     Unreachable,
    99     Unreachable,
    95 }
   100 }
   181     [$($part: expr),*] => {
   186     [$($part: expr),*] => {
   182         format!(concat!($(const_braces!($part)),*, "\n"), $($part),*);
   187         format!(concat!($(const_braces!($part)),*, "\n"), $($part),*);
   183     };
   188     };
   184 }
   189 }
   185 
   190 
   186 fn construct_message(mut msg: Vec<&str>) -> String {
   191 fn construct_message(header: &[&str], msg: &Vec<String>) -> String {
   187     msg.push("\n");
   192     let mut v: Vec<_> = header.iter().map(|s| *s).collect();
   188     msg.join("\n")
   193     v.extend(msg.iter().map(|s| &s[..]));
       
   194     v.push("\n");
       
   195     v.join("\n")
   189 }
   196 }
   190 
   197 
   191 impl HWServerMessage {
   198 impl HWServerMessage {
   192     pub fn to_raw_protocol(&self) -> String {
   199     pub fn to_raw_protocol(&self) -> String {
   193         use self::HWServerMessage::*;
   200         use self::HWServerMessage::*;
   200                 protocol_version],
   207                 protocol_version],
   201             Bye(msg) => msg!["BYE", msg],
   208             Bye(msg) => msg!["BYE", msg],
   202             Nick(nick) => msg!["NICK", nick],
   209             Nick(nick) => msg!["NICK", nick],
   203             Proto(proto) => msg!["PROTO", proto],
   210             Proto(proto) => msg!["PROTO", proto],
   204             LobbyLeft(nick, msg) => msg!["LOBBY:LEFT", nick, msg],
   211             LobbyLeft(nick, msg) => msg!["LOBBY:LEFT", nick, msg],
   205             LobbyJoined(nicks) => {
   212             LobbyJoined(nicks) =>
   206                 let mut v = vec!["LOBBY:JOINED"];
   213                 construct_message(&["LOBBY:JOINED"], &nicks),
   207                 v.extend(nicks.iter().map(|n| { &n[..] }));
   214             ClientFlags(flags, nicks) =>
   208                 construct_message(v)
   215                 construct_message(&["CLIENT_FLAGS", flags], &nicks),
   209             },
   216             Rooms(info) =>
   210             ClientFlags(flags, nicks)
   217                 construct_message(&["ROOMS"], &info),
   211                 => {
   218             RoomAdd(info) =>
   212                 let mut v = vec!["CLIENT_FLAGS"];
   219                 construct_message(&["ROOM", "ADD"], &info),
   213                 v.push(&flags[..]);
   220             RoomJoined(nicks) =>
   214                 v.extend(nicks.iter().map(|n| { &n[..] }));
   221                 construct_message(&["JOINED"], &nicks),
   215                 construct_message(v)
       
   216             },
       
   217             Rooms(info) => {
       
   218                 let mut v = vec!["ROOMS"];
       
   219                 v.extend(info.iter().map(|n| { &n[..] }));
       
   220                 construct_message(v)
       
   221             },
       
   222             RoomAdd(info) => {
       
   223                 let mut v = vec!["ROOM", "ADD"];
       
   224                 v.extend(info.iter().map(|n| { &n[..] }));
       
   225                 construct_message(v)
       
   226             },
       
   227             RoomJoined(nicks) => {
       
   228                 let mut v = vec!["JOINED"];
       
   229                 v.extend(nicks.iter().map(|n| { &n[..] }));
       
   230                 construct_message(v)
       
   231             },
       
   232             RoomLeft(nick, msg) => msg!["LEFT", nick, msg],
   222             RoomLeft(nick, msg) => msg!["LEFT", nick, msg],
   233             RoomRemove(name) => msg!["ROOM", "DEL", name],
   223             RoomRemove(name) => msg!["ROOM", "DEL", name],
   234             RoomUpdated(name, info) => {
   224             RoomUpdated(name, info) =>
   235                 let mut v = vec!["ROOM", "UPD", name];
   225                 construct_message(&["ROOM", "UPD", name], &info),
   236                 v.extend(info.iter().map(|n| { &n[..] }));
   226             TeamAdd(info) =>
   237                 construct_message(v)
   227                 construct_message(&["ADD_TEAM"], &info),
   238             }
   228             TeamRemove(name) => msg!["REMOVE_TEAM", name],
       
   229             TeamAccepted(name) => msg!["TEAM_ACCEPTED", name],
       
   230             TeamColor(name, color) => msg!["TEAM_COLOR", name, color],
       
   231             HedgehogsNumber(name, number) => msg!["HH_NUM", name, number],
   239             ChatMsg(nick, msg) => msg!["CHAT", nick, msg],
   232             ChatMsg(nick, msg) => msg!["CHAT", nick, msg],
   240             ServerMessage(msg) => msg!["SERVER_MESSAGE", msg],
   233             ServerMessage(msg) => msg!["SERVER_MESSAGE", msg],
   241             Warning(msg) => msg!["WARNING", msg],
   234             Warning(msg) => msg!["WARNING", msg],
   242             Error(msg) => msg!["ERROR", msg],
   235             Error(msg) => msg!["ERROR", msg],
   243             _ => msg!["ERROR", "UNIMPLEMENTED"],
   236             _ => msg!["ERROR", "UNIMPLEMENTED"],