diff --git a/src/constant.rs b/src/constant.rs new file mode 100644 index 0000000..2085855 --- /dev/null +++ b/src/constant.rs @@ -0,0 +1,5 @@ +pub const METADATA_SIZE: usize = 2; +pub const MESSAGE_KIND_MOVE: u8 = 0; +pub const MESSAGE_KIND_PLAYER_SETUP: u8 = 1; +pub const MESSAGE_KIND_LOBBY_SETUP: u8 = 2; + diff --git a/src/lib.rs b/src/lib.rs index 88e2556..884e156 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,3 +6,4 @@ pub mod lobby; pub mod player; pub mod message; pub mod message_read; +pub mod constant; diff --git a/src/message.rs b/src/message.rs index adbc9e2..17cd0d2 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,16 +1,28 @@ +use crate::constant::METADATA_SIZE; + // everything here needs to be adjusted for the deserialized json // #[derive(Debug, Clone)] pub struct Message { + pub message_kind: MessageKind, pub length: u16, pub content: String, } +// idk i just want to layout something, really didn't think much +#[derive(Debug, Clone)] +pub enum MessageKind { + Move(u8), + PlayerSetup(u8), + LobbySetup(u8), +} + impl Message { pub fn new(content: impl Into) -> anyhow::Result { let content = content.into(); let length = content.len() as u16; + // add message kind to constructor Ok(Self { length, content, @@ -26,18 +38,14 @@ impl Message { } pub fn decode(buffer: &[u8]) -> anyhow::Result { - // this `if` compares the buffer length to the minimum - // message size (which is 2 because it takes to bytes - // to write 0), it is now hardcoded but it MUST be moved - // into a constant in a special constant definition file - // byeeeeeeeeeeeeeeeeee luv ya - if buffer.len() < 2 { + if buffer.len() < METADATA_SIZE { return Err(anyhow::anyhow!("Invalid message length")); } let length = u16::from_be_bytes([buffer[0], buffer[1]]); let content = String::from_utf8(buffer[2..2 + length as usize].to_vec())?; + // add message kind to constructor Ok(Self { length, content, diff --git a/src/message_read.rs b/src/message_read.rs index 8fb8719..74535a1 100644 --- a/src/message_read.rs +++ b/src/message_read.rs @@ -1,7 +1,5 @@ -// every hardcoded 2 will one day be a constant in a special -// constant file but rn I AM LAZY AND ITS LATE -// -use crate::message::Message; +// add message kind everywhere is needed +use crate::{constant::METADATA_SIZE, message::Message}; pub struct MessageReader { pub buffer: Vec, @@ -13,17 +11,17 @@ impl MessageReader { } fn can_parse(&self) -> bool { - if self.buffer.len() < 2 { + if self.buffer.len() < METADATA_SIZE { return false; } let length = u16::from_be_bytes([self.buffer[0], self.buffer[1]]); - self.buffer.len() >= 2 + length as usize + self.buffer.len() >= METADATA_SIZE + length as usize } fn parse_first(&mut self) -> anyhow::Result { let length = u16::from_be_bytes([self.buffer[0], self.buffer[1]]); - let message_length = 2 + length as usize; + let message_length = METADATA_SIZE + length as usize; let message = self.buffer[..message_length].to_vec(); self.buffer = self.buffer[message_length..].to_vec();