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:
parent
7165c60fa7
commit
a7590d9f22
|
|
@ -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!() }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue