added global message spport to client manager

This commit is contained in:
michael-bailey 2022-09-23 08:30:40 +01:00
parent 4717861f65
commit 1541020968
6 changed files with 50 additions and 16 deletions

View File

@ -3,19 +3,19 @@ use uuid::Uuid;
#[derive(Clone)]
pub struct Message {
id: Uuid,
from: Uuid,
content: String,
time: DateTime<Local>,
_id: Uuid,
_from: Uuid,
_content: String,
_time: DateTime<Local>,
}
impl Message {
pub fn new(from: Uuid, content: String) -> Self {
Self {
id: Uuid::new(),
from,
content,
time: Local::now(),
_id: Uuid::new_v4(),
_from: from,
_content: content,
_time: Local::now(),
}
}
}

View File

@ -9,6 +9,7 @@ pub enum ChatManagerMessage {
AddMessage(Uuid, String),
}
#[allow(dead_code)]
#[derive(ActixMessage, Debug)]
#[rtype(result = "ChatManagerDataResponse")]
pub enum ChatManagerDataMessage {

View File

@ -4,9 +4,14 @@
//! - Messages
//! - Mesage type
mod chat_manager;
mod actor;
mod message_type;
mod messages;
pub(crate) use chat_manager::ChatManager;
pub(crate) use actor::ChatManager;
use message_type::Message;
pub(crate) use messages::{
ChatManagerDataMessage,
ChatManagerDataResponse,
ChatManagerMessage,
};

View File

@ -15,7 +15,7 @@ use tokio_stream::StreamExt;
use uuid::Uuid;
use crate::client_management::{
chat_manager::ChatManager,
chat_manager::{ChatManager, ChatManagerMessage},
client::{
Client,
ClientDataMessage,
@ -112,7 +112,7 @@ impl ClientManager {
let client_details: Vec<ClientDetails> = collection.await;
let pos = client_details.iter().position(|i| i.uuid == from);
if let Some(_) = pos {
if pos.is_some() {
sender
.send(SendMessage { content, from })
.await
@ -131,13 +131,22 @@ impl ClientManager {
content: String,
) {
use crate::client_management::client::ClientMessage::SendGlobalMessage;
let client_addr: Vec<Addr<Client>> =
self.clients.iter().map(|(_, v)| v).cloned().collect();
if let Some(sender) = sender.upgrade() {
let cm = self.chat_manager.clone();
let snd1 = sender.clone();
let snd2 = sender;
let cont1 = content.clone();
let cont2 = content;
let fut = wrap_future(async move {
let details: ClientDataResponse =
sender.send(ClientDataMessage::Details).await.unwrap();
snd1.send(ClientDataMessage::Details).await.unwrap();
let from = if let Details(details) = details {
details.uuid
@ -148,15 +157,28 @@ impl ClientManager {
let collection = tokio_stream::iter(client_addr)
.then(move |addr| {
addr.send(SendGlobalMessage {
content: content.clone(),
content: cont1.clone(),
from,
})
})
.collect();
// this is shit, i dont need this
let _: Vec<_> = collection.await;
});
let chat_manager_fut = wrap_future(async move {
let details: ClientDataResponse =
snd2.send(ClientDataMessage::Details).await.unwrap();
let from = if let Details(details) = details {
details.uuid
} else {
ClientDetails::default().uuid
};
let _ = cm.send(ChatManagerMessage::AddMessage(from, cont2)).await;
});
ctx.spawn(fut);
ctx.spawn(chat_manager_fut);
}
}

View File

@ -12,7 +12,13 @@ pub mod client;
mod client_manager;
mod messages;
use chat_manager::ChatManager;
#[allow(unused_imports)]
use chat_manager::{
ChatManager,
ChatManagerDataMessage,
ChatManagerDataResponse,
ChatManagerMessage,
};
pub(crate) use client_manager::ClientManager;
pub(crate) use messages::{
ClientManagerDataMessage,