diff options
| author | troido <troido@protonmail.com> | 2020-04-23 17:01:39 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-04-23 17:01:39 +0200 |
| commit | d577a3f874a3fc2cb71708f400482ca817abc33e (patch) | |
| tree | 1e3d89253e906bc6e5781c631b0e8341303889e9 /src | |
| parent | 4d1cbdf2fc0d79b99589327eb378306c557d346a (diff) | |
added option to join the server without joining the game (just for the chat)
Diffstat (limited to 'src')
| -rw-r--r-- | src/gameserver.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/gameserver.rs b/src/gameserver.rs index 709ee9d..37b889f 100644 --- a/src/gameserver.rs +++ b/src/gameserver.rs @@ -22,7 +22,7 @@ enum Authentication { #[derive(Debug)] enum Message { - Auth(String, Authentication), + Auth(String, Authentication, bool), Chat(String), Input(Value) } @@ -131,7 +131,7 @@ impl GameServer { fn handle_message(&mut self, (serverid, connectionid): (usize, usize), msg: Message) -> Result<Option<Action>, MessageError> { let id = (serverid, connectionid); match msg { - Message::Auth(name, auth) => { + Message::Auth(name, auth, join) => { if name.len() > 99 { return Err(merr!(name, "A name can not be longer than 99 bytes")); } @@ -166,7 +166,11 @@ impl GameServer { "server" ])); } - Ok(Some(Action::Join(player))) + Ok(if join { + Some(Action::Join(player)) + } else { + None + }) } Message::Chat(text) => { let player = self.players.get(&id).ok_or(merr!(action, "Set a valid name before you send any other messages"))?; @@ -243,7 +247,8 @@ fn parse_message(msg: &str) -> Result<Message, MessageError> { Authentication::Tilde } else { Authentication::Guest - } + }, + true ) } "chat" => { @@ -256,6 +261,7 @@ fn parse_message(msg: &str) -> Result<Message, MessageError> { "auth" => { let name = arg.get("name").ok_or(merr!(msg, "auth message does not have name"))?.as_str().ok_or(merr!(msg, "auth name not a string"))?.to_string(); let typ = arg.get("type").ok_or(merr!(msg, "auth message does not have type"))?.as_str().ok_or(merr!(msg, "auth type not a string"))?; + let join = arg.get("join").unwrap_or(&json!(true)).as_bool().ok_or(merr!(msg, "join flag not a bool"))?; Message::Auth( name, match typ { @@ -270,7 +276,8 @@ fn parse_message(msg: &str) -> Result<Message, MessageError> { .to_string() ), _ => {return Err(merr!(msg, "invalid authentication type"))} - } + }, + join ) } _ => { |
