diff --git a/foundation/Cargo.toml b/foundation/Cargo.toml index 48db9a7..4c7fc5b 100644 --- a/foundation/Cargo.toml +++ b/foundation/Cargo.toml @@ -8,16 +8,14 @@ edition = "2018" [lib] [dependencies] +chrono = {version = "0.4", features = ["serde", "rustc-serialize"] } async-trait = "0.1.52" regex = "1" crossbeam = "0.8.0" crossbeam-channel = "0.5.0" crossbeam-queue = "0.3.1" -parking_lot = "0.11.1" -dashmap = "4.0.2" rayon = "1.2.0" zeroize = "1.1.0" -crossterm = "0.19.0" log = "0.4" url = "2.2.0" futures = "0.3.16" diff --git a/foundation/src/lib.rs b/foundation/src/lib.rs index 228b30b..8e63b55 100644 --- a/foundation/src/lib.rs +++ b/foundation/src/lib.rs @@ -3,6 +3,7 @@ pub mod connection; pub mod encryption; pub mod event; pub mod messages; +pub mod models; pub mod prelude; pub mod test; diff --git a/foundation/src/messages/client.rs b/foundation/src/messages/client.rs index db5c7ac..6fb37c1 100644 --- a/foundation/src/messages/client.rs +++ b/foundation/src/messages/client.rs @@ -1,15 +1,15 @@ use serde::{Deserialize, Serialize}; use uuid::Uuid; -use crate::ClientDetails; +use crate::{models::message::Message, ClientDetails}; /// This enum defined the message that the server will receive from a client /// This uses the serde library to transform to and from json. #[derive(Serialize, Deserialize)] #[serde(tag = "type")] pub enum ClientStreamIn { - Connected, - Update, + GetClients, + GetMessages, SendMessage { to: Uuid, content: String }, SendGlobalMessage { content: String }, @@ -22,24 +22,21 @@ pub enum ClientStreamIn { #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "type")] pub enum ClientStreamOut { + Connected, + + // get reequest messages ConnectedClients { clients: Vec }, + GlobalChatMessages { messages: Vec }, + + // event messges UserMessage { from: Uuid, content: String }, GlobalMessage { from: Uuid, content: String }, - Disconnected, - Connected, + ClientConnected { id: Uuid, username: String }, + ClientRemoved { id: Uuid }, + + Disconnected, // error cases Error, } - -impl PartialEq for ClientStreamOut { - fn eq(&self, other: &Self) -> bool { - use ClientStreamOut::{Connected, Disconnected}; - match (self, other) { - (Connected, Connected) => true, - (Disconnected, Disconnected) => true, - _ => false, - } - } -} diff --git a/foundation/src/models/message.rs b/foundation/src/models/message.rs new file mode 100644 index 0000000..906c533 --- /dev/null +++ b/foundation/src/models/message.rs @@ -0,0 +1,22 @@ +use chrono::{DateTime, Local}; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Message { + _id: Uuid, + _from: Uuid, + _content: String, + _time: DateTime, +} + +impl Message { + pub fn new(from: Uuid, content: String) -> Self { + Self { + _id: Uuid::new_v4(), + _from: from, + _content: content, + _time: Local::now(), + } + } +} diff --git a/foundation/src/models/mod.rs b/foundation/src/models/mod.rs new file mode 100644 index 0000000..e216a50 --- /dev/null +++ b/foundation/src/models/mod.rs @@ -0,0 +1 @@ +pub mod message; diff --git a/server/src/client_management/client/actor.rs b/server/src/client_management/client/actor.rs index ab60018..959addb 100644 --- a/server/src/client_management/client/actor.rs +++ b/server/src/client_management/client/actor.rs @@ -50,15 +50,15 @@ impl Client { ) { use foundation::messages::client::ClientStreamIn::{ Disconnect, + GetClients, SendGlobalMessage, SendMessage, - Update, }; use serde_json::from_str; let msg = from_str::(data.as_str()) .expect("[Client] failed to decode incoming message"); match msg { - Update => self.handle_update(ctx), + GetClients => self.handle_update(ctx), SendMessage { to, content } => self.handle_send(ctx, to, content), SendGlobalMessage { content } => self.handle_global_send(ctx, content), Disconnect => self.handle_disconnect(ctx),