refactored messages and added new message types
This commit is contained in:
parent
7714938c6b
commit
5e087604e5
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
pub mod message;
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in New Issue