refactored messages and added new message types

This commit is contained in:
michael-bailey 2022-09-25 12:25:58 +01:00
parent 7714938c6b
commit 5e087604e5
6 changed files with 40 additions and 21 deletions

View File

@ -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"

View File

@ -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;

View File

@ -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<ClientDetails> },
GlobalChatMessages { messages: Vec<Message> },
// 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,
}
}
}

View File

@ -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<Local>,
}
impl Message {
pub fn new(from: Uuid, content: String) -> Self {
Self {
_id: Uuid::new_v4(),
_from: from,
_content: content,
_time: Local::now(),
}
}
}

View File

@ -0,0 +1 @@
pub mod message;

View File

@ -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::<ClientStreamIn>(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),