From 906a2dcd16b9a41d4dd80df37b4b8358bf398b65 Mon Sep 17 00:00:00 2001 From: Andy Newjack Date: Mon, 27 Apr 2020 21:59:15 -0300 Subject: [PATCH 1/3] add room password handling --- src/ship/location.rs | 2 -- src/ship/ship.rs | 21 ++++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/ship/location.rs b/src/ship/location.rs index bc15201..08af31f 100644 --- a/src/ship/location.rs +++ b/src/ship/location.rs @@ -159,7 +159,6 @@ impl ClientLocation { Ok(()) } - pub fn add_client_to_next_available_lobby(&mut self, id: ClientId, lobby: LobbyId) -> Result { let l = (0..15) .map(|lobby_index| { @@ -207,7 +206,6 @@ impl ClientLocation { Ok(()) } - pub fn get_all_clients_by_client(&self, id: ClientId) -> Result, GetNeighborError> { let area = self.client_location.get(&id).ok_or(GetNeighborError::InvalidClient)?; match area { diff --git a/src/ship/ship.rs b/src/ship/ship.rs index 10d2db5..3cf03d2 100644 --- a/src/ship/ship.rs +++ b/src/ship/ship.rs @@ -51,6 +51,7 @@ pub enum ShipError { pub enum RecvShipPacket { Login(Login), MenuSelect(MenuSelect), + RoomPasswordReq(RoomPasswordReq), CharData(CharData), Message(Message), DirectMessage(DirectMessage), @@ -70,7 +71,13 @@ impl RecvServerPacket for RecvShipPacket { fn from_bytes(data: &[u8]) -> Result { match u16::from_le_bytes([data[2], data[3]]) { 0x93 => Ok(RecvShipPacket::Login(Login::from_bytes(data)?)), - 0x10 => Ok(RecvShipPacket::MenuSelect(MenuSelect::from_bytes(data)?)), + 0x10 => { + match data[0] { + 16 => Ok(RecvShipPacket::MenuSelect(MenuSelect::from_bytes(data)?)), + 48 => Ok(RecvShipPacket::RoomPasswordReq(RoomPasswordReq::from_bytes(data)?)), + _ => Err(PacketParseError::WrongPacketForServerType(u16::from_le_bytes([data[2], data[3]]), data.to_vec())), + } + }, 0x61 => Ok(RecvShipPacket::CharData(CharData::from_bytes(data)?)), 0x60 => Ok(RecvShipPacket::Message(Message::from_bytes(data)?)), 0x62 => Ok(RecvShipPacket::DirectMessage(DirectMessage::from_bytes(data)?)), @@ -261,6 +268,18 @@ impl ServerState for ShipServerState { _ => unreachable!(), } }, + RecvShipPacket::RoomPasswordReq(room_password_req) => { + if room_password_req.password == self.rooms[room_password_req.item as usize].as_ref().unwrap().password { + let menuselect = MenuSelect { + menu: room_password_req.menu, + item: room_password_req.item, + }; + handler::room::join_room(id, &menuselect, &mut self.client_location, &mut self.clients, &self.level_table, &mut self.rooms)? + } + else { + Box::new(vec![(id, SendShipPacket::SmallDialog(SmallDialog::new("Incorrect password".into())))].into_iter()) + } + }, RecvShipPacket::CharData(chardata) => { Box::new(handler::lobby::send_player_to_lobby(id, chardata, &mut self.client_location, &self.clients, &self.level_table)?.into_iter()) }, From a83aa2d9df0c88607978b99e65c15c6224967910 Mon Sep 17 00:00:00 2001 From: Andy Newjack Date: Mon, 27 Apr 2020 22:57:08 -0300 Subject: [PATCH 2/3] and i oop braces --- src/ship/ship.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/ship/ship.rs b/src/ship/ship.rs index 3cf03d2..750af72 100644 --- a/src/ship/ship.rs +++ b/src/ship/ship.rs @@ -71,12 +71,10 @@ impl RecvServerPacket for RecvShipPacket { fn from_bytes(data: &[u8]) -> Result { match u16::from_le_bytes([data[2], data[3]]) { 0x93 => Ok(RecvShipPacket::Login(Login::from_bytes(data)?)), - 0x10 => { - match data[0] { - 16 => Ok(RecvShipPacket::MenuSelect(MenuSelect::from_bytes(data)?)), - 48 => Ok(RecvShipPacket::RoomPasswordReq(RoomPasswordReq::from_bytes(data)?)), - _ => Err(PacketParseError::WrongPacketForServerType(u16::from_le_bytes([data[2], data[3]]), data.to_vec())), - } + 0x10 => match data[0] { + 16 => Ok(RecvShipPacket::MenuSelect(MenuSelect::from_bytes(data)?)), + 48 => Ok(RecvShipPacket::RoomPasswordReq(RoomPasswordReq::from_bytes(data)?)), + _ => Err(PacketParseError::WrongPacketForServerType(u16::from_le_bytes([data[2], data[3]]), data.to_vec())), }, 0x61 => Ok(RecvShipPacket::CharData(CharData::from_bytes(data)?)), 0x60 => Ok(RecvShipPacket::Message(Message::from_bytes(data)?)), From 36ee49d28e5b144bed516a60bbdd4d33d8b1fcd4 Mon Sep 17 00:00:00 2001 From: Andy Newjack Date: Wed, 29 Apr 2020 00:45:48 -0300 Subject: [PATCH 3/3] remove unwrap --- src/ship/ship.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ship/ship.rs b/src/ship/ship.rs index 750af72..e329a84 100644 --- a/src/ship/ship.rs +++ b/src/ship/ship.rs @@ -267,7 +267,9 @@ impl ServerState for ShipServerState { } }, RecvShipPacket::RoomPasswordReq(room_password_req) => { - if room_password_req.password == self.rooms[room_password_req.item as usize].as_ref().unwrap().password { + if room_password_req.password == self.rooms[room_password_req.item as usize].as_ref() + .ok_or(ShipError::InvalidRoom(room_password_req.item))? + .password { let menuselect = MenuSelect { menu: room_password_req.menu, item: room_password_req.item,