diff options
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(())      } | 
