diff options
Diffstat (limited to 'server/src/state.rs')
-rw-r--r-- | server/src/state.rs | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/server/src/state.rs b/server/src/state.rs index ae3388b6..da05f33a 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -21,6 +21,9 @@ enum Command { #[arg(default_value = "small-default-default")] spec: String, }, + Effect { + name: String, + }, End, } @@ -45,13 +48,17 @@ impl State { pub async fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> { match &packet { PacketS::Communicate { - message: Some(Message::Text(message)), - } if let Some(command) = message.strip_prefix("/") => { - self.handle_command(Command::try_parse_from( - shlex::split(command) - .ok_or(anyhow!("quoting invalid"))? - .into_iter(), - )?) + 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(()); } @@ -61,7 +68,7 @@ impl State { Ok(()) } - async fn handle_command(&mut self, command: Command) -> Result<()> { + async fn handle_command(&mut self, player: PlayerID, command: Command) -> Result<()> { match command { Command::Start { spec } => { let data = self.index.generate(spec)?; @@ -71,6 +78,15 @@ impl State { self.game .load(self.index.generate("lobby-none-none".to_string())?); } + Command::Effect { name } => { + self.tx + .send(PacketC::Communicate { + player, + message: Some(Message::Effect(name)), + persist: false, + }) + .ok(); + } } Ok(()) } |