diff --git a/Cargo.toml b/Cargo.toml
index a2ee271..4d850dc 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,6 +21,7 @@ log = "0.4"
url = "2.2.0"
uuid = {version = "0.8", features = ["serde", "v4"]}
serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
[profile.dev]
diff --git a/src/lib/server/client_management/client/mod.rs b/src/lib/server/client_management/client/mod.rs
index 6dd9d14..416177f 100644
--- a/src/lib/server/client_management/client/mod.rs
+++ b/src/lib/server/client_management/client/mod.rs
@@ -7,16 +7,39 @@ use std::cmp::Ordering;
use std::net::TcpStream;
use std::sync::Mutex;
use std::sync::Arc;
+use std::io::{BufReader, BufWriter};
+use std::io::BufRead;
use uuid::Uuid;
-use serde::Serialize;
+use serde::{Serialize, Deserialize};
use crossbeam_channel::{Sender, Receiver, unbounded};
use traits::IClient;
use crate::lib::Foundation::{ICooperative, IMessagable};
use crate::lib::server::ServerMessages;
-pub enum ClientMessage {}
+/// # ClientMessage
+/// This enum defined the message that a client can receive from the server
+/// This uses the serde library to transform to and from json.
+#[derive(Serialize, Deserialize)]
+pub enum ClientMessage {
+ Disconnect {id: String},
+ Update {id: String},
+
+ ServerMessage {id: String, msg: String},
+
+ NewMessage {id: String, from_user_id: String, msg: String},
+ NewgroupMessage {id: String, from_group_id: String, from_user_id: String, msg: String},
+}
+
+/// # ClientSocketMessage
+/// This enum defines a message that can be sent from a client to the server once connected
+/// This uses the serde library to transform to and from json.
+#[derive(Serialize, Deserialize)]
+pub enum ClientSocketMessage {
+ Disconnect {id: String},
+ SendMessage {id: String, to_user_id: String, msg: String}
+}
/// # Client
/// This struct represents a connected user.
@@ -46,13 +69,23 @@ pub struct Client {
#[serde(skip)]
stream: Mutex