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