summaryrefslogtreecommitdiff
path: root/server/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/state.rs')
-rw-r--r--server/src/state.rs33
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(())
}