created chat manager and added it to the client manager
This commit is contained in:
parent
12ebbc9bd5
commit
4717861f65
|
|
@ -1,25 +1,39 @@
|
||||||
use actix::{Actor, Context, Handler};
|
use actix::{Actor, Addr, Context, Handler};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::client_management::chat_manager::{
|
use crate::client_management::chat_manager::{
|
||||||
message_type::Message, messages::ChatManagerMessage,
|
message_type::Message,
|
||||||
|
messages::{ChatManagerDataMessage, ChatManagerDataResponse, ChatManagerMessage},
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ChatManager {
|
pub(crate) struct ChatManager {
|
||||||
messages: Vec<Message>,
|
messages: Vec<Message>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ChatManager {
|
impl ChatManager {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Addr<Self> {
|
||||||
Self {
|
Self {
|
||||||
messages: Vec::new(),
|
messages: Vec::new(),
|
||||||
}
|
}
|
||||||
|
.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
// no need for a remove methods because this is a read only system
|
// no need for a remove methods because this is a read only system
|
||||||
pub fn add_message(&mut self, id: Uuid, content: String) {
|
fn add_message(&mut self, _ctx: &mut Context<Self>, id: Uuid, content: String) {
|
||||||
self.messages.push(Message::new(id, content))
|
self.messages.push(Message::new(id, content))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_messages(&self, _ctx: &mut Context<Self>) -> ChatManagerDataResponse {
|
||||||
|
ChatManagerDataResponse::GotMessages(self.messages.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_message(
|
||||||
|
&self,
|
||||||
|
_ctx: &mut Context<Self>,
|
||||||
|
index: usize,
|
||||||
|
) -> ChatManagerDataResponse {
|
||||||
|
ChatManagerDataResponse::GotMessage(self.messages.get(index).cloned())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Actor for ChatManager {
|
impl Actor for ChatManager {
|
||||||
|
|
@ -29,13 +43,24 @@ impl Actor for ChatManager {
|
||||||
impl Handler<ChatManagerMessage> for ChatManager {
|
impl Handler<ChatManagerMessage> for ChatManager {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
|
|
||||||
fn handle(
|
fn handle(&mut self, msg: ChatManagerMessage, ctx: &mut Self::Context) -> Self::Result {
|
||||||
&mut self,
|
|
||||||
msg: ChatManagerMessage,
|
|
||||||
_ctx: &mut Self::Context,
|
|
||||||
) -> Self::Result {
|
|
||||||
match msg {
|
match msg {
|
||||||
ChatManagerMessage::AddMessage(id, content) => self.add_message(id, content),
|
ChatManagerMessage::AddMessage(id, content) => self.add_message(ctx, id, content),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Handler<ChatManagerDataMessage> for ChatManager {
|
||||||
|
type Result = ChatManagerDataResponse;
|
||||||
|
|
||||||
|
fn handle(
|
||||||
|
&mut self,
|
||||||
|
msg: ChatManagerDataMessage,
|
||||||
|
ctx: &mut Self::Context,
|
||||||
|
) -> Self::Result {
|
||||||
|
match msg {
|
||||||
|
ChatManagerDataMessage::GetMessages => self.get_messages(ctx),
|
||||||
|
ChatManagerDataMessage::GetMessage(index) => self.get_message(ctx, index),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
use chrono::{DateTime, Local};
|
use chrono::{DateTime, Local};
|
||||||
|
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Message {
|
pub struct Message {
|
||||||
|
id: Uuid,
|
||||||
from: Uuid,
|
from: Uuid,
|
||||||
content: String,
|
content: String,
|
||||||
time: DateTime<Local>,
|
time: DateTime<Local>,
|
||||||
|
|
@ -11,6 +12,7 @@ pub struct Message {
|
||||||
impl Message {
|
impl Message {
|
||||||
pub fn new(from: Uuid, content: String) -> Self {
|
pub fn new(from: Uuid, content: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
id: Uuid::new(),
|
||||||
from,
|
from,
|
||||||
content,
|
content,
|
||||||
time: Local::now(),
|
time: Local::now(),
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,23 @@
|
||||||
use actix::{Message, MessageResponse};
|
use actix::{Message as ActixMessage, MessageResponse};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
#[derive(Message, Debug)]
|
use super::Message;
|
||||||
|
|
||||||
|
#[derive(ActixMessage, Debug)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub enum ChatManagerMessage {
|
pub enum ChatManagerMessage {
|
||||||
AddMessage(Uuid, String),
|
AddMessage(Uuid, String),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Message, Debug)]
|
#[derive(ActixMessage, Debug)]
|
||||||
#[rtype(result = "ChatManagerDataResponse")]
|
#[rtype(result = "ChatManagerDataResponse")]
|
||||||
pub enum ChatManagerDataMessage {}
|
pub enum ChatManagerDataMessage {
|
||||||
|
GetMessages,
|
||||||
|
GetMessage(usize),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(MessageResponse)]
|
#[derive(MessageResponse)]
|
||||||
pub enum ChatManagerDataResponse {}
|
pub enum ChatManagerDataResponse {
|
||||||
|
GotMessages(Vec<Message>),
|
||||||
|
GotMessage(Option<Message>),
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,12 @@
|
||||||
|
//! Contains all the structures for managing chat storage.
|
||||||
|
//! it contains:
|
||||||
|
//! - ChatManager
|
||||||
|
//! - Messages
|
||||||
|
//! - Mesage type
|
||||||
|
|
||||||
mod chat_manager;
|
mod chat_manager;
|
||||||
mod message_type;
|
mod message_type;
|
||||||
mod messages;
|
mod messages;
|
||||||
|
|
||||||
|
pub(crate) use chat_manager::ChatManager;
|
||||||
use message_type::Message;
|
use message_type::Message;
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ use tokio_stream::StreamExt;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::client_management::{
|
use crate::client_management::{
|
||||||
|
chat_manager::ChatManager,
|
||||||
client::{
|
client::{
|
||||||
Client,
|
Client,
|
||||||
ClientDataMessage,
|
ClientDataMessage,
|
||||||
|
|
@ -34,6 +35,7 @@ use crate::client_management::{
|
||||||
|
|
||||||
pub struct ClientManager {
|
pub struct ClientManager {
|
||||||
clients: HashMap<Uuid, Addr<Client>>,
|
clients: HashMap<Uuid, Addr<Client>>,
|
||||||
|
chat_manager: Addr<ChatManager>,
|
||||||
_delegate: WeakRecipient<ClientManagerOutput>,
|
_delegate: WeakRecipient<ClientManagerOutput>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,6 +44,7 @@ impl ClientManager {
|
||||||
ClientManager {
|
ClientManager {
|
||||||
_delegate: delegate,
|
_delegate: delegate,
|
||||||
clients: HashMap::new(),
|
clients: HashMap::new(),
|
||||||
|
chat_manager: ChatManager::new(),
|
||||||
}
|
}
|
||||||
.start()
|
.start()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,11 @@ pub mod client;
|
||||||
mod client_manager;
|
mod client_manager;
|
||||||
mod messages;
|
mod messages;
|
||||||
|
|
||||||
|
use chat_manager::ChatManager;
|
||||||
pub(crate) use client_manager::ClientManager;
|
pub(crate) use client_manager::ClientManager;
|
||||||
pub(crate) use messages::{
|
pub(crate) use messages::{
|
||||||
ClientManagerDataMessage, ClientManagerDataResponse, ClientManagerMessage,
|
ClientManagerDataMessage,
|
||||||
|
ClientManagerDataResponse,
|
||||||
|
ClientManagerMessage,
|
||||||
ClientManagerOutput,
|
ClientManagerOutput,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue