gameServer2/src/protocol/parser.rs
changeset 13422 5fb27f94fc3b
parent 13419 81e0ed105f5d
child 13423 87a6cad20c90
equal deleted inserted replaced
13421:d1368c776a4f 13422:5fb27f94fc3b
     7 use super::{
     7 use super::{
     8     messages::{HWProtocolMessage, HWProtocolMessage::*},
     8     messages::{HWProtocolMessage, HWProtocolMessage::*},
     9     test::gen_proto_msg
     9     test::gen_proto_msg
    10 };
    10 };
    11 use server::coretypes::{
    11 use server::coretypes::{
    12     HedgehogInfo, TeamInfo
    12     HedgehogInfo, TeamInfo, GameCfg
    13 };
    13 };
    14 
    14 
    15 named!(end_of_message, tag!("\n\n"));
    15 named!(end_of_message, tag!("\n\n"));
    16 named!(str_line<&[u8],   &str>, map_res!(not_line_ending, str::from_utf8));
    16 named!(str_line<&[u8],   &str>, map_res!(not_line_ending, str::from_utf8));
    17 named!(  a_line<&[u8], String>, map!(str_line, String::from));
    17 named!(  a_line<&[u8], String>, map!(str_line, String::from));
   137                     r: a_line     >> eol >>
   137                     r: a_line     >> eol >>
   138                     t: u32_line   >>
   138                     t: u32_line   >>
   139                     (BanNick(n, r, t)))
   139                     (BanNick(n, r, t)))
   140 ));
   140 ));
   141 
   141 
       
   142 named!(cfg_message<&[u8], HWProtocolMessage>, preceded!(tag!("CFG\n"), map!(alt!(
       
   143       do_parse!(tag!("THEME")    >> eol >>
       
   144                 name: a_line     >>
       
   145                 (GameCfg::Theme(name)))
       
   146     | do_parse!(tag!("SCRIPT")   >> eol >>
       
   147                 name: a_line     >>
       
   148                 (GameCfg::Script(name)))
       
   149     | do_parse!(tag!("AMMO")     >> eol >>
       
   150                 name: a_line     >>
       
   151                 value: opt_param >>
       
   152                 (GameCfg::Ammo(name, value)))
       
   153     | do_parse!(tag!("SCHEME")   >> eol >>
       
   154                 name: a_line     >> eol >>
       
   155                 values: separated_list!(eol, a_line) >>
       
   156                 (GameCfg::Scheme(name,
       
   157                     if values.is_empty() {None} else {Some(values)})))
       
   158     | do_parse!(tag!("FEATURE_SIZE") >> eol >>
       
   159                 value: u32_line    >>
       
   160                 (GameCfg::FeatureSize(value)))
       
   161     | do_parse!(tag!("MAP")      >> eol >>
       
   162                 value: a_line    >>
       
   163                 (GameCfg::MapType(value)))
       
   164     | do_parse!(tag!("MAPGEN")   >> eol >>
       
   165                 value: u32_line  >>
       
   166                 (GameCfg::MapGenerator(value)))
       
   167     | do_parse!(tag!("MAZE_SIZE") >> eol >>
       
   168                 value: u32_line   >>
       
   169                 (GameCfg::MazeSize(value)))
       
   170     | do_parse!(tag!("SEED")     >> eol >>
       
   171                 value: a_line    >>
       
   172                 (GameCfg::Seed(value)))
       
   173     | do_parse!(tag!("TEMPLATE") >> eol >>
       
   174                 value: u32_line  >>
       
   175                 (GameCfg::Template(value)))
       
   176     | do_parse!(tag!("DRAWNMAP") >> eol >>
       
   177                 value: a_line    >>
       
   178                 (GameCfg::DrawnMap(value)))
       
   179 ), Cfg)));
       
   180 
   142 named!(malformed_message<&[u8], HWProtocolMessage>,
   181 named!(malformed_message<&[u8], HWProtocolMessage>,
   143     do_parse!(separated_list!(eol, a_line) >> (Malformed)));
   182     do_parse!(separated_list!(eol, a_line) >> (Malformed)));
   144 
   183 
   145 named!(empty_message<&[u8], HWProtocolMessage>,
   184 named!(empty_message<&[u8], HWProtocolMessage>,
   146     do_parse!(alt!(end_of_message | eol) >> (Empty)));
   185     do_parse!(alt!(end_of_message | eol) >> (Empty)));
   149     alt!(
   188     alt!(
   150           basic_message
   189           basic_message
   151         | one_param_message
   190         | one_param_message
   152         | cmd_message
   191         | cmd_message
   153         | complex_message
   192         | complex_message
       
   193         | cfg_message
   154         ), end_of_message
   194         ), end_of_message
   155     )
   195     )
   156     | terminated!(malformed_message, end_of_message)
   196     | terminated!(malformed_message, end_of_message)
   157     | empty_message
   197     | empty_message
   158     )
   198     )