Update mod.rs

+ added self referenceing to teh client manager with a weak reference

+ added channels to the client manager
This commit is contained in:
michael-bailey 2021-02-08 17:46:22 +00:00 committed by michael bailey
parent 8df5ac848b
commit 96450d5da2
1 changed files with 35 additions and 4 deletions

View File

@ -3,8 +3,9 @@ pub mod client;
use std::sync::Weak;
use std::sync::Arc;
use std::sync::Mutex;
use crossbeam_channel::{Sender, Receiver};
use crossbeam_channel::{Sender, Receiver, unbounded};
use uuid::Uuid;
@ -13,21 +14,51 @@ use self::client::ClientMessage;
// use client::client_v3::Client;
use self::traits::TClientManager;
enum ClientManagerMessages {
}
/// # ClientManager
/// This struct manages all connected users
pub struct ClientManager {
clients: Vec<Arc<Client>>,
weak_self: Option<Weak<Self>>,
weak_self: Mutex<Option<Weak<Self>>>,
sender: Sender<ClientManagerMessages>,
receiver: Receiver<ClientManagerMessages>,
}
impl ClientManager {
pub fn new() -> Arc<Self> {
let channels = unbounded();
let mut manager_ref: Arc<Self> = Arc::new(ClientManager {
clients: Vec::default(),
weak_self: Mutex::default(),
sender: channels.0,
receiver: channels.1,
});
manager_ref.set_ref(manager_ref.clone());
manager_ref
}
pub fn get_ref(&self) -> Arc<Self>{
let new_ref: Weak<Self> = self.weak_self.lock().unwrap().clone().unwrap();
new_ref.upgrade().unwrap()
}
fn set_ref(&self, reference: Arc<Self>) {
let mut lock = self.weak_self.lock().unwrap();
*lock = Some(Arc::downgrade(&reference));
}
}
impl TClientManager<Client, ClientMessage> for ClientManager {
fn addClient(&self, Client: std::sync::Arc<Client>) { todo!() }