Update client_manager.rs

- implemented handle channel method from old start method.
- added notes to possible issues.
This commit is contained in:
michael-bailey 2022-02-28 17:48:15 +00:00
parent 9512b82cd0
commit 294edc4df3
1 changed files with 53 additions and 1 deletions

View File

@ -52,7 +52,58 @@ impl<Out> ClientManager<Out>
}
pub async fn handle_channel(&self, message: Option<ClientMgrMessage>) {
println!("Handling channel")
use ClientMgrMessage::{Add, Remove, SendClients, BroadcastGlobalMessage, SendError};
println!("Handling channel");
match message {
Some(Add(client)) => {
let mut lock = self.clients.lock().await;
lock.insert(client.details.uuid, client);
},
Some(Remove(uuid)) => {
println!("[Client Manager]: removing client: {:?}", &uuid);
let mut lock = self.clients.lock().await;
lock.remove(&uuid);
},
Some(SendClients { to }) => {
let lock = self.clients.lock().await;
if let Some(client) = lock.get(&to) {
let clients_vec: Vec<ClientDetails> =
lock.values()
.cloned()
.map(|i| i.details.clone())
.collect();
// todo: add method to send clients
// client
// .send_message(ClientMessage::SendClients {
// clients: clients_vec,
// })
// .await
}
},
Some(BroadcastGlobalMessage {sender, content}) => {
let lock = self.clients.lock().await;
let futures = lock.iter().map(|(_,_)| async {
println!("Send message to Client")
});
// todo: Implement this instead of prints
// .map(|i| i.1.send_message(
// ClientMessage::GlobalBroadcastMessage {from: sender, content: content.clone()}
// ));
join_all(futures).await;
},
Some(SendError { to }) => {
let lock = self.clients.lock().await;
if let Some(client) = lock.get(&to) {
// todo! implement a error message passing function
// client.send_message(ClientMessage::Error).await
}
}
_ => {
unimplemented!()
}
}
}
#[deprecated]
@ -85,6 +136,7 @@ impl<Out> ClientManager<Out>
client.send_message(ClientMessage::Disconnect).await;
}
}
// todo: - need to rethink this one
SendMessage { to, from, content } => {
client_manager
.send_to_client(&to, ClientMessage::Message { from, content })