diff -r e3ae9eea0689 -r c8b626b0a3ad gameServer2/src/protocol/parser.rs --- a/gameServer2/src/protocol/parser.rs Fri Jul 20 00:02:52 2018 +0300 +++ b/gameServer2/src/protocol/parser.rs Fri Jul 20 22:14:20 2018 +0300 @@ -24,6 +24,8 @@ named!(end_of_message, tag!("\n\n")); named!(str_line<&[u8], &str>, map_res!(not_line_ending, str::from_utf8)); named!( a_line<&[u8], String>, map!(str_line, String::from)); +named!(cmd_arg<&[u8], String>, + map!(map_res!(take_until_either!(" \n"), str::from_utf8), String::from)); named!( u8_line<&[u8], u8>, map_res!(str_line, FromStr::from_str)); named!(u16_line<&[u8], u16>, map_res!(str_line, FromStr::from_str)); named!(u32_line<&[u8], u32>, map_res!(str_line, FromStr::from_str)); @@ -104,9 +106,10 @@ | do_parse!(tag_no_case!("PART") >> m: opt_space_param >> (Part(m))) | do_parse!(tag_no_case!("QUIT") >> m: opt_space_param >> (Quit(m))) | do_parse!(tag_no_case!("DELEGATE") >> spaces >> n: a_line >> (Delegate(n))) + | do_parse!(tag_no_case!("SAVE") >> spaces >> n: cmd_arg >> spaces >> l: cmd_arg >> (Save(n, l))) + | do_parse!(tag_no_case!("DELETE") >> spaces >> n: a_line >> (Delete(n))) | do_parse!(tag_no_case!("SAVEROOM") >> spaces >> r: a_line >> (SaveRoom(r))) | do_parse!(tag_no_case!("LOADROOM") >> spaces >> r: a_line >> (LoadRoom(r))) - | do_parse!(tag_no_case!("DELETE") >> spaces >> r: a_line >> (Delete(r))) | do_parse!(tag_no_case!("GLOBAL") >> spaces >> m: a_line >> (Global(m))) | do_parse!(tag_no_case!("WATCH") >> spaces >> i: a_line >> (Watch(i))) | do_parse!(tag_no_case!("GREETING") >> spaces >> m: a_line >> (Greeting(m)))