From a8c37225aea05a1c297e17e2f2f73f8e97acadd8 Mon Sep 17 00:00:00 2001 From: michael-bailey Date: Thu, 18 Mar 2021 09:20:39 +0000 Subject: [PATCH] implemented basic client manager functions for new architecture --- src/lib/server/client_management/mod.rs | 32 +++++++++++----------- src/lib/server/client_management/traits.rs | 6 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lib/server/client_management/mod.rs b/src/lib/server/client_management/mod.rs index cd226b6..032c0bc 100644 --- a/src/lib/server/client_management/mod.rs +++ b/src/lib/server/client_management/mod.rs @@ -2,18 +2,17 @@ pub mod client; mod traits; // use crate::lib::server::ServerMessages; -use crate::lib::server::ServerMessages; use std::sync::Arc; use std::sync::Mutex; -use std::sync::Weak; +use std::collections::HashMap; use crossbeam_channel::{unbounded, Receiver, Sender}; use uuid::Uuid; -use crate::lib::Foundation::{IOwner, IOwned}; use self::client::Client; use self::client::ClientMessage; use self::traits::TClientManager; +use crate::lib::server::ServerMessages; use crate::lib::Foundation::IMessagable; use crate::lib::Foundation::ICooperative; @@ -23,12 +22,10 @@ enum ClientManagerMessages {} /// This struct manages all connected users #[derive(Debug)] pub struct ClientManager { - clients: Mutex>>, + clients: Mutex>>, server_channel: Sender, - // server_channel: Sender, - sender: Sender, receiver: Receiver, } @@ -51,29 +48,32 @@ impl ClientManager { impl TClientManager for ClientManager { fn add_client(&self, client: std::sync::Arc) { - self.clients.lock().unwrap().push(client); + self.clients.lock().unwrap().insert(client.uuid, client); } - fn remove_client(&self, _uuid: Uuid) { - self.clients.lock().unwrap().sort(); + fn remove_client(&self, uuid: Uuid) { + let _ = self.clients.lock().unwrap().remove(&uuid); } - fn message_client(&self, _id: Uuid, _msg: ClientMessage) { - todo!() + fn send_message_to_client(&self, uuid: Uuid, msg: ClientMessage) { + let clients = self.clients.lock().unwrap(); + let client = clients.get(&uuid).unwrap(); + client.send_message(msg); } +} +impl ICooperative for ClientManager { fn tick(&self) { - let client_list = self.clients.lock().unwrap(); - let _ = client_list.iter().map(|client| client.tick()); + } } #[cfg(test)] mod test { - use super::ClientManager; - use std::sync::Arc; - use crate::lib::Foundation::{IOwner}; + // use super::ClientManager; + // use std::sync::Arc; + // use crate::lib::Foundation::{IOwner}; #[test] fn test_get_ref() { diff --git a/src/lib/server/client_management/traits.rs b/src/lib/server/client_management/traits.rs index a48af0a..d2bc94a 100644 --- a/src/lib/server/client_management/traits.rs +++ b/src/lib/server/client_management/traits.rs @@ -1,3 +1,4 @@ +use crate::lib::server::client_management::client::ClientMessage; use std::sync::Arc; use uuid::Uuid; @@ -7,7 +8,6 @@ use uuid::Uuid; */ pub trait TClientManager { fn add_client(&self, client: Arc); - fn remove_client(&self, id: Uuid); - fn message_client(&self, id: Uuid, msg: TClientMessage); - fn tick(&self, ); + fn remove_client(&self, uuid: Uuid); + fn send_message_to_client(&self, uuid: Uuid, msg: ClientMessage); } \ No newline at end of file