diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/cmd/commands/mod.rs | 4 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_distance/mod.rs | 5 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_distance/parse.rs | 17 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_distance/structure.rs | 8 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_room/mod.rs | 2 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_room/parse.rs | 12 | ||||
| -rw-r--r-- | src/server/cmd/commands/subscribe_room/structure.rs | 11 | ||||
| -rw-r--r-- | src/server/cmd/commands/teleport/mod.rs | 5 | ||||
| -rw-r--r-- | src/server/cmd/commands/teleport/parse.rs | 36 | ||||
| -rw-r--r-- | src/server/cmd/commands/teleport/structure.rs | 24 | ||||
| -rw-r--r-- | src/server/hub.rs | 18 |
11 files changed, 129 insertions, 13 deletions
diff --git a/src/server/cmd/commands/mod.rs b/src/server/cmd/commands/mod.rs index 1fad6a3..fab8734 100644 --- a/src/server/cmd/commands/mod.rs +++ b/src/server/cmd/commands/mod.rs @@ -6,7 +6,9 @@ pub mod buddy_list; pub mod property; pub mod room; pub mod session; -pub mod subscribe; +pub mod subscribe_distance; +pub mod subscribe_room; +pub mod teleport; pub mod text; pub mod whisper; // pub mod register_object_id; // TODO: Implement. diff --git a/src/server/cmd/commands/subscribe_distance/mod.rs b/src/server/cmd/commands/subscribe_distance/mod.rs new file mode 100644 index 0000000..a72d443 --- /dev/null +++ b/src/server/cmd/commands/subscribe_distance/mod.rs @@ -0,0 +1,5 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +pub mod parse; +mod structure; diff --git a/src/server/cmd/commands/subscribe_distance/parse.rs b/src/server/cmd/commands/subscribe_distance/parse.rs new file mode 100644 index 0000000..25365b1 --- /dev/null +++ b/src/server/cmd/commands/subscribe_distance/parse.rs @@ -0,0 +1,17 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +use byteorder::{BigEndian, ReadBytesExt}; +use bytes::{Buf, BytesMut}; + +use crate::server::cmd::commands::subscribe_distance::structure::SubscribeDistance; + +pub fn parse_subscribe_distance(data: Vec<u8>) -> SubscribeDistance { + // https://stackoverflow.com/questions/41034635/how-do-i-convert-between-string-str-vecu8-and-u8 + let mut data = BytesMut::from(data.as_slice()).reader(); + + SubscribeDistance { + distance: data.read_i16::<BigEndian>().unwrap(), + room_number: data.read_i16::<BigEndian>().unwrap(), + } +} diff --git a/src/server/cmd/commands/subscribe_distance/structure.rs b/src/server/cmd/commands/subscribe_distance/structure.rs new file mode 100644 index 0000000..0c12e47 --- /dev/null +++ b/src/server/cmd/commands/subscribe_distance/structure.rs @@ -0,0 +1,8 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +#[derive(Debug)] +pub struct SubscribeDistance { + pub distance: i16, + pub room_number: i16, +} diff --git a/src/server/cmd/commands/subscribe_room/mod.rs b/src/server/cmd/commands/subscribe_room/mod.rs index 8018a71..a72d443 100644 --- a/src/server/cmd/commands/subscribe_room/mod.rs +++ b/src/server/cmd/commands/subscribe_room/mod.rs @@ -1,5 +1,5 @@ // Copyleft (ɔ) 2021-2021 The Whirlsplash Collective // SPDX-License-Identifier: GPL-3.0-only -mod parse; +pub mod parse; mod structure; diff --git a/src/server/cmd/commands/subscribe_room/parse.rs b/src/server/cmd/commands/subscribe_room/parse.rs index 82d480f..f90ac63 100644 --- a/src/server/cmd/commands/subscribe_room/parse.rs +++ b/src/server/cmd/commands/subscribe_room/parse.rs @@ -4,7 +4,7 @@ use byteorder::{BigEndian, ReadBytesExt}; use bytes::{Buf, BytesMut}; -use crate::server::cmd::commands::subscribe::structure::SubscribeRoom; +use crate::server::cmd::commands::subscribe_room::structure::SubscribeRoom; /// TODO: The functionality of this function has not been tested... TEST IT! pub fn parse_subscribe_room(data: Vec<u8>) -> SubscribeRoom { @@ -12,10 +12,10 @@ pub fn parse_subscribe_room(data: Vec<u8>) -> SubscribeRoom { let mut data = BytesMut::from(data.as_slice()).reader(); SubscribeRoom { - room_number: data.read_i16::<BigEndian>().unwrap(), - distance: data.read_i16::<BigEndian>().unwrap(), - x: data.read_i16::<BigEndian>().unwrap(), - y: data.read_i16::<BigEndian>().unwrap(), - z: data.read_i16::<BigEndian>().unwrap(), + room_number: data.read_i16::<BigEndian>().unwrap() as i8, + x: data.read_i16::<BigEndian>().unwrap() as i8 as f32, + y: data.read_i16::<BigEndian>().unwrap() as i8 as f32, + z: data.read_i16::<BigEndian>().unwrap() as i8 as f32, + distance: data.read_i16::<BigEndian>().unwrap() as i8 as f32, // + 100 } } diff --git a/src/server/cmd/commands/subscribe_room/structure.rs b/src/server/cmd/commands/subscribe_room/structure.rs index 1817cf8..61be683 100644 --- a/src/server/cmd/commands/subscribe_room/structure.rs +++ b/src/server/cmd/commands/subscribe_room/structure.rs @@ -1,10 +1,11 @@ // Copyleft (ɔ) 2021-2021 The Whirlsplash Collective // SPDX-License-Identifier: GPL-3.0-only +#[derive(Debug)] pub struct SubscribeRoom { - pub room_number: i16, - pub distance: i16, - pub x: i16, - pub y: i16, - pub z: i16, + pub room_number: i8, + pub x: f32, + pub y: f32, + pub z: f32, + pub distance: f32, } diff --git a/src/server/cmd/commands/teleport/mod.rs b/src/server/cmd/commands/teleport/mod.rs new file mode 100644 index 0000000..a72d443 --- /dev/null +++ b/src/server/cmd/commands/teleport/mod.rs @@ -0,0 +1,5 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +pub mod parse; +mod structure; diff --git a/src/server/cmd/commands/teleport/parse.rs b/src/server/cmd/commands/teleport/parse.rs new file mode 100644 index 0000000..07f3133 --- /dev/null +++ b/src/server/cmd/commands/teleport/parse.rs @@ -0,0 +1,36 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +use byteorder::{BigEndian, ReadBytesExt}; +use bytes::{Buf, BytesMut}; + +use crate::server::cmd::commands::teleport::structure::{Teleport, TeleportLiteral}; + +pub fn parse_teleport(data: Vec<u8>) -> Teleport { + // https://stackoverflow.com/questions/41034635/how-do-i-convert-between-string-str-vecu8-and-u8 + let mut data = BytesMut::from(data.as_slice()).reader(); + + Teleport { + room_id: data.read_u16::<BigEndian>().unwrap() as i8, + exit_type: data.read_u8().unwrap(), + entry_type: data.read_u8().unwrap(), + x: data.read_i16::<BigEndian>().unwrap(), + y: data.read_i16::<BigEndian>().unwrap(), + z: data.read_i16::<BigEndian>().unwrap(), + direction: data.read_i16::<BigEndian>().unwrap(), + } +} + +pub fn parse_teleport_literal(data: Vec<u8>) -> TeleportLiteral { + let teleport = parse_teleport(data); + + TeleportLiteral { + room_id: teleport.room_id, + exit_type: teleport.exit_type, + entry_type: teleport.entry_type, + x: teleport.x as f32, + y: teleport.y as f32, + z: teleport.z as f32, + direction: teleport.direction as f32, + } +} diff --git a/src/server/cmd/commands/teleport/structure.rs b/src/server/cmd/commands/teleport/structure.rs new file mode 100644 index 0000000..8a38c60 --- /dev/null +++ b/src/server/cmd/commands/teleport/structure.rs @@ -0,0 +1,24 @@ +// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective +// SPDX-License-Identifier: GPL-3.0-only + +#[derive(Debug)] +pub struct Teleport { + pub room_id: i8, + pub exit_type: u8, + pub entry_type: u8, + pub x: i16, + pub y: i16, + pub z: i16, + pub direction: i16, +} + +#[derive(Debug)] +pub struct TeleportLiteral { + pub room_id: i8, + pub exit_type: u8, + pub entry_type: u8, + pub x: f32, + pub y: f32, + pub z: f32, + pub direction: f32, +} diff --git a/src/server/hub.rs b/src/server/hub.rs index ee562d6..8c982ad 100644 --- a/src/server/hub.rs +++ b/src/server/hub.rs @@ -25,6 +25,9 @@ use crate::{ parse::find_property_in_property_list, }, room::{create::create_room_id_request, parse::parse_room_id_request}, + subscribe_distance::parse::parse_subscribe_distance, + subscribe_room::parse::parse_subscribe_room, + teleport::parse::parse_teleport, text::{create::create_text, parse::parse_text, structure::Text}, }, constants::*, @@ -119,6 +122,21 @@ impl Server for Hub { } trace!("broadcasted text to hub"); } + SUBSCRIB => { + let subscribe_room = parse_subscribe_room(msg[3..].to_vec()); + trace!("received subscribe room from {}: {:?}", + username, subscribe_room); + } + SUB_DIST => { + let subscribe_distance = parse_subscribe_distance(msg[3..].to_vec()); + trace!("received subscribe distance from {}: {:?}", + username, subscribe_distance); + } + TELEPORT => { + let teleport = parse_teleport(msg[3..].to_vec()); + trace!("received teleport from {}: {:?}", + username, teleport); + } _ => (), } } |