diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-29 20:26:02 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-29 20:26:02 +0200 |
commit | 04a4902d1054a2e8776107c99ef83496b6050b60 (patch) | |
tree | 45d4bd14ec4a17e0accd060bf7211ee421418a34 /server/src/state.rs | |
parent | 03c46a18d3a283ee737688c4c65bb5ef1d6ba1dc (diff) | |
download | hurrycurry-04a4902d1054a2e8776107c99ef83496b6050b60.tar hurrycurry-04a4902d1054a2e8776107c99ef83496b6050b60.tar.bz2 hurrycurry-04a4902d1054a2e8776107c99ef83496b6050b60.tar.zst |
server message for command errors
Diffstat (limited to 'server/src/state.rs')
-rw-r--r-- | server/src/state.rs | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/server/src/state.rs b/server/src/state.rs index da05f33a..41ffce20 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -45,26 +45,37 @@ impl State { let _ = self.tx.send(p); } } - pub async fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> { + pub async fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<Vec<PacketC>> { match &packet { PacketS::Communicate { message: Some(Message::Text(text)), persist: false, } if let Some(command) = text.strip_prefix("/") => { - self.handle_command( - player, - Command::try_parse_from( - shlex::split(command) - .ok_or(anyhow!("quoting invalid"))? - .into_iter(), - )?, - ) - .await?; - return Ok(()); + match self.handle_command_parse(player, command).await { + Ok(()) => return Ok(vec![]), + Err(e) => { + return Ok(vec![PacketC::ServerMessage { + text: format!("{e}"), + }]); + } + } } _ => (), } self.game.packet_in(player, packet)?; + Ok(vec![]) + } + + async fn handle_command_parse(&mut self, player: PlayerID, command: &str) -> Result<()> { + self.handle_command( + player, + Command::try_parse_from( + shlex::split(command) + .ok_or(anyhow!("quoting invalid"))? + .into_iter(), + )?, + ) + .await?; Ok(()) } |