rust/hedgewars-network-protocol/src/parser.rs
changeset 15833 a855f32ab3ca
parent 15832 ee84e417d8d0
child 15852 ea459da15b30
equal deleted inserted replaced
15832:ee84e417d8d0 15833:a855f32ab3ca
   198         message("TOGGLE_READY", ToggleReady),
   198         message("TOGGLE_READY", ToggleReady),
   199         message("START_GAME", StartGame),
   199         message("START_GAME", StartGame),
   200         message("TOGGLE_RESTRICT_JOINS", ToggleRestrictJoin),
   200         message("TOGGLE_RESTRICT_JOINS", ToggleRestrictJoin),
   201         message("TOGGLE_RESTRICT_TEAMS", ToggleRestrictTeams),
   201         message("TOGGLE_RESTRICT_TEAMS", ToggleRestrictTeams),
   202         message("TOGGLE_REGISTERED_ONLY", ToggleRegisteredOnly),
   202         message("TOGGLE_REGISTERED_ONLY", ToggleRegisteredOnly),
       
   203         message("READY", CheckerReady),
   203     ))(input)
   204     ))(input)
   204 }
   205 }
   205 
   206 
   206 fn single_arg_message(input: &[u8]) -> HwResult<HwProtocolMessage> {
   207 fn single_arg_message(input: &[u8]) -> HwResult<HwProtocolMessage> {
   207     fn message<'a, T, F, G>(
   208     fn message<'a, T, F, G>(
   229         message("ROOM_NAME\n", a_line, RoomName),
   230         message("ROOM_NAME\n", a_line, RoomName),
   230         message("REMOVE_TEAM\n", a_line, RemoveTeam),
   231         message("REMOVE_TEAM\n", a_line, RemoveTeam),
   231         message("ROUNDFINISHED", opt_arg, |_| RoundFinished),
   232         message("ROUNDFINISHED", opt_arg, |_| RoundFinished),
   232         message("PROTO\n", u16_line, Proto),
   233         message("PROTO\n", u16_line, Proto),
   233         message("QUIT", opt_arg, Quit),
   234         message("QUIT", opt_arg, Quit),
       
   235         message("CHECKED\nFAIL\n", a_line, CheckedFail),
   234     ))(input)
   236     ))(input)
   235 }
   237 }
   236 
   238 
   237 fn cmd_message<'a>(input: &'a [u8]) -> HwResult<'a, HwProtocolMessage> {
   239 fn cmd_message<'a>(input: &'a [u8]) -> HwResult<'a, HwProtocolMessage> {
   238     fn cmd_no_arg<'a>(
   240     fn cmd_no_arg<'a>(
   480                     u32_line,
   482                     u32_line,
   481                 )),
   483                 )),
   482                 |(nick, reason, time)| BanNick(nick, reason, time),
   484                 |(nick, reason, time)| BanNick(nick, reason, time),
   483             ),
   485             ),
   484         ),
   486         ),
   485     ))(input)
   487         map(
       
   488             preceded(
       
   489                 tag("CHECKED\nOK"),
       
   490                 alt((
       
   491                     map(peek(end_of_message), |_| None),
       
   492                     map(preceded(newline, separated_list0(newline, a_line)), Some),
       
   493                 )),
       
   494             ),
       
   495             |values| CheckedOk(values.unwrap_or_default()),
       
   496         )
       
   497 ))(input)
   486 }
   498 }
   487 
   499 
   488 pub fn malformed_message(input: &[u8]) -> HwResult<()> {
   500 pub fn malformed_message(input: &[u8]) -> HwResult<()> {
   489     map(terminated(take_until(&b"\n\n"[..]), end_of_message), |_| ())(input)
   501     map(terminated(take_until(&b"\n\n"[..]), end_of_message), |_| ())(input)
   490 }
   502 }
   651                 list_message("JOINED", RoomJoined),
   663                 list_message("JOINED", RoomJoined),
   652                 list_message("ADD_TEAM", TeamAdd),
   664                 list_message("ADD_TEAM", TeamAdd),
   653                 list_message("EM", ForwardEngineMessage),
   665                 list_message("EM", ForwardEngineMessage),
   654                 list_message("INFO", Info),
   666                 list_message("INFO", Info),
   655                 list_message("SERVER_VARS", ServerVars),
   667                 list_message("SERVER_VARS", ServerVars),
       
   668                 list_message("REPLAY", Replay),
   656             )),
   669             )),
   657         )),
   670         )),
   658         end_of_message,
   671         end_of_message,
   659     )(input)
   672     )(input)
   660 }
   673 }