From 82c46f67cbe869f247512a4c124074d29f1fae74 Mon Sep 17 00:00:00 2001 From: AndreaDenina Date: Fri, 31 Jan 2025 16:10:26 +0100 Subject: [PATCH 1/3] refactor, added client_commands mod --- src/client_commands.rs | 0 src/high_level_messages.rs | 126 ++++++++++++++++++++++++++++++++++++ src/lib.rs | 128 +------------------------------------ 3 files changed, 128 insertions(+), 126 deletions(-) create mode 100644 src/client_commands.rs create mode 100644 src/high_level_messages.rs diff --git a/src/client_commands.rs b/src/client_commands.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/high_level_messages.rs b/src/high_level_messages.rs new file mode 100644 index 0000000..7d339a2 --- /dev/null +++ b/src/high_level_messages.rs @@ -0,0 +1,126 @@ +use serde::{Deserialize, Serialize}; +use wg_2024::network::NodeId; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ClientMessage { + // Web Browser Messages + GetServerType, // server_type? + GetFilesList, // files_list? + GetFile(String), // file?(file_id) + GetMedia(String), // media?(media_id) + + // Chat Messages + RegisterToChat, // registration_to_chat + GetClientList, // client_list? + SendMessage { + // message_for?(client_id, message) + recipient_id: NodeId, + content: String, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ServerMessage { + // Web Browser Responses + ServerType(ServerType), // server_type!(type) + FilesList(Vec), // files_list!(list_of_file_ids) + File { + // file!(file_size, file) + size: usize, + content: String, + }, + Media(Vec), // media!(media) + + // Chat Responses + ClientList(Vec), // client_list!(list_of_client_ids) + MessageReceived { + // message_from!(client_id, message) + sender_id: NodeId, + content: String, + }, + + // Error Messages + ErrorRequestedNotFound, // error_requested_not_found! + ErrorUnsupportedRequest, // error_unsupported_request! + ErrorWrongClientId, // error_wrong_client_id! +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ServerType { + TextServer, + MediaServer, + ChatServer, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Message { + pub session_id: u64, + pub source_id: NodeId, + pub destination_id: NodeId, + pub content: MessageContent, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum MessageContent { + FromClient(ClientMessage), + FromServer(ServerMessage), +} + +impl Message { + pub fn serialize(&self) -> Result, Box> { + Ok(bincode::serialize(self)?) + } + + pub fn deserialize(bytes: &[u8]) -> Result> { + Ok(bincode::deserialize(bytes)?) + } + + pub fn new_client_message( + session_id: u64, + source_id: NodeId, + destination_id: NodeId, + content: ClientMessage, + ) -> Self { + Self { + session_id, + source_id, + destination_id, + content: MessageContent::FromClient(content), + } + } + + pub fn new_server_message( + session_id: u64, + source_id: NodeId, + destination_id: NodeId, + content: ServerMessage, + ) -> Self { + Self { + session_id, + source_id, + destination_id, + content: MessageContent::FromServer(content), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_serialization() -> Result<(), Box> { + let message = + Message::new_client_message(1, 2, 3, ClientMessage::GetFile("test.txt".to_string())); + + let serialized = message.serialize()?; + + let deserialized = Message::deserialize(&serialized)?; + + assert_eq!(message.session_id, deserialized.session_id); + assert_eq!(message.source_id, deserialized.source_id); + assert_eq!(message.destination_id, deserialized.destination_id); + + Ok(()) + } +} diff --git a/src/lib.rs b/src/lib.rs index 7d339a2..c124fd1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,126 +1,2 @@ -use serde::{Deserialize, Serialize}; -use wg_2024::network::NodeId; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ClientMessage { - // Web Browser Messages - GetServerType, // server_type? - GetFilesList, // files_list? - GetFile(String), // file?(file_id) - GetMedia(String), // media?(media_id) - - // Chat Messages - RegisterToChat, // registration_to_chat - GetClientList, // client_list? - SendMessage { - // message_for?(client_id, message) - recipient_id: NodeId, - content: String, - }, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ServerMessage { - // Web Browser Responses - ServerType(ServerType), // server_type!(type) - FilesList(Vec), // files_list!(list_of_file_ids) - File { - // file!(file_size, file) - size: usize, - content: String, - }, - Media(Vec), // media!(media) - - // Chat Responses - ClientList(Vec), // client_list!(list_of_client_ids) - MessageReceived { - // message_from!(client_id, message) - sender_id: NodeId, - content: String, - }, - - // Error Messages - ErrorRequestedNotFound, // error_requested_not_found! - ErrorUnsupportedRequest, // error_unsupported_request! - ErrorWrongClientId, // error_wrong_client_id! -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ServerType { - TextServer, - MediaServer, - ChatServer, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Message { - pub session_id: u64, - pub source_id: NodeId, - pub destination_id: NodeId, - pub content: MessageContent, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum MessageContent { - FromClient(ClientMessage), - FromServer(ServerMessage), -} - -impl Message { - pub fn serialize(&self) -> Result, Box> { - Ok(bincode::serialize(self)?) - } - - pub fn deserialize(bytes: &[u8]) -> Result> { - Ok(bincode::deserialize(bytes)?) - } - - pub fn new_client_message( - session_id: u64, - source_id: NodeId, - destination_id: NodeId, - content: ClientMessage, - ) -> Self { - Self { - session_id, - source_id, - destination_id, - content: MessageContent::FromClient(content), - } - } - - pub fn new_server_message( - session_id: u64, - source_id: NodeId, - destination_id: NodeId, - content: ServerMessage, - ) -> Self { - Self { - session_id, - source_id, - destination_id, - content: MessageContent::FromServer(content), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_serialization() -> Result<(), Box> { - let message = - Message::new_client_message(1, 2, 3, ClientMessage::GetFile("test.txt".to_string())); - - let serialized = message.serialize()?; - - let deserialized = Message::deserialize(&serialized)?; - - assert_eq!(message.session_id, deserialized.session_id); - assert_eq!(message.source_id, deserialized.source_id); - assert_eq!(message.destination_id, deserialized.destination_id); - - Ok(()) - } -} +mod high_level_messages; +mod client_commands; \ No newline at end of file From 2d40bf4522a11ae6f6d4f0dd5b216fab4d9b07a6 Mon Sep 17 00:00:00 2001 From: AndreaDenina Date: Fri, 31 Jan 2025 16:55:10 +0100 Subject: [PATCH 2/3] added the chatclient commands --- Cargo.toml | 1 + src/client_commands.rs | 19 +++++++++++++++++++ src/high_level_messages.rs | 1 + 3 files changed, 21 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index f953a6f..b09552f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,5 +5,6 @@ edition = "2021" [dependencies] wg_2024 = { git = "https://github.com/WGL-2024/WGL_repo_2024.git", features = ["serialize", "debug"] } +crossbeam-channel = "0.5.13" serde = { version = "1.0", features = ["derive"] } bincode = "1.3" \ No newline at end of file diff --git a/src/client_commands.rs b/src/client_commands.rs index e69de29..77f38e5 100644 --- a/src/client_commands.rs +++ b/src/client_commands.rs @@ -0,0 +1,19 @@ +use wg_2024::{network::NodeId, packet::Packet}; +use crossbeam_channel::Sender; +#[derive(Debug,Clone)] +pub enum ChatClientCommand { + RemoveSender(NodeId), + AddSender(NodeId, Sender), +// Crash, + SendMessageTo(NodeId,String), //dest_client + RegisterTo(NodeId), //dest_server + GetClientListFrom(NodeId), //dest_server +} +#[derive(Debug,Clone)] +pub enum ChatClientEvent { + MessageReceived(NodeId,String), //source_client + SuccessfulRegistration(NodeId), //dest_server + ClientList(NodeId,Vec), //source_server +} + + diff --git a/src/high_level_messages.rs b/src/high_level_messages.rs index 7d339a2..2e4e1a8 100644 --- a/src/high_level_messages.rs +++ b/src/high_level_messages.rs @@ -32,6 +32,7 @@ pub enum ServerMessage { Media(Vec), // media!(media) // Chat Responses + SuccessfulRegistration, ClientList(Vec), // client_list!(list_of_client_ids) MessageReceived { // message_from!(client_id, message) From a020e43fcc9152368a8140f66f2f6be9a3099387 Mon Sep 17 00:00:00 2001 From: AndreaDenina Date: Fri, 31 Jan 2025 17:01:17 +0100 Subject: [PATCH 3/3] cargo fmt, minor changes --- src/client_commands.rs | 22 ++++++++++------------ src/high_level_messages.rs | 6 +++--- src/lib.rs | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/client_commands.rs b/src/client_commands.rs index 77f38e5..912410b 100644 --- a/src/client_commands.rs +++ b/src/client_commands.rs @@ -1,19 +1,17 @@ -use wg_2024::{network::NodeId, packet::Packet}; use crossbeam_channel::Sender; -#[derive(Debug,Clone)] +use wg_2024::{network::NodeId, packet::Packet}; +#[derive(Debug, Clone)] pub enum ChatClientCommand { RemoveSender(NodeId), AddSender(NodeId, Sender), -// Crash, - SendMessageTo(NodeId,String), //dest_client - RegisterTo(NodeId), //dest_server - GetClientListFrom(NodeId), //dest_server + // Crash, + SendMessageTo(NodeId, String), //dest_client + RegisterTo(NodeId), //dest_server + GetClientListFrom(NodeId), //dest_server } -#[derive(Debug,Clone)] +#[derive(Debug, Clone)] pub enum ChatClientEvent { - MessageReceived(NodeId,String), //source_client - SuccessfulRegistration(NodeId), //dest_server - ClientList(NodeId,Vec), //source_server + MessageReceived(NodeId, String), //source_client + SuccessfulRegistration(NodeId), //dest_server + ClientList(NodeId, Vec), //source_server } - - diff --git a/src/high_level_messages.rs b/src/high_level_messages.rs index 2e4e1a8..79e4a0f 100644 --- a/src/high_level_messages.rs +++ b/src/high_level_messages.rs @@ -48,9 +48,9 @@ pub enum ServerMessage { #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ServerType { - TextServer, - MediaServer, - ChatServer, + Text, + Media, + Chat, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/lib.rs b/src/lib.rs index c124fd1..2c048ec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,2 @@ +mod client_commands; mod high_level_messages; -mod client_commands; \ No newline at end of file