aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/cmd/commands/mod.rs4
-rw-r--r--src/server/cmd/commands/subscribe_distance/mod.rs5
-rw-r--r--src/server/cmd/commands/subscribe_distance/parse.rs17
-rw-r--r--src/server/cmd/commands/subscribe_distance/structure.rs8
-rw-r--r--src/server/cmd/commands/subscribe_room/mod.rs2
-rw-r--r--src/server/cmd/commands/subscribe_room/parse.rs12
-rw-r--r--src/server/cmd/commands/subscribe_room/structure.rs11
-rw-r--r--src/server/cmd/commands/teleport/mod.rs5
-rw-r--r--src/server/cmd/commands/teleport/parse.rs36
-rw-r--r--src/server/cmd/commands/teleport/structure.rs24
-rw-r--r--src/server/hub.rs18
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);
+ }
_ => (),
}
}