added global message spport to client manager
This commit is contained in:
parent
4717861f65
commit
1541020968
|
|
@ -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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ pub enum ChatManagerMessage {
|
|||
AddMessage(Uuid, String),
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(ActixMessage, Debug)]
|
||||
#[rtype(result = "ChatManagerDataResponse")]
|
||||
pub enum ChatManagerDataMessage {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue