implemented basic client manager functions for new architecture
This commit is contained in:
parent
e92096b6ad
commit
b1b8107ce7
|
|
@ -2,18 +2,17 @@ pub mod client;
|
||||||
mod traits;
|
mod traits;
|
||||||
|
|
||||||
// use crate::lib::server::ServerMessages;
|
// use crate::lib::server::ServerMessages;
|
||||||
use crate::lib::server::ServerMessages;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use std::sync::Weak;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use crossbeam_channel::{unbounded, Receiver, Sender};
|
use crossbeam_channel::{unbounded, Receiver, Sender};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::lib::Foundation::{IOwner, IOwned};
|
|
||||||
use self::client::Client;
|
use self::client::Client;
|
||||||
use self::client::ClientMessage;
|
use self::client::ClientMessage;
|
||||||
use self::traits::TClientManager;
|
use self::traits::TClientManager;
|
||||||
|
use crate::lib::server::ServerMessages;
|
||||||
use crate::lib::Foundation::IMessagable;
|
use crate::lib::Foundation::IMessagable;
|
||||||
use crate::lib::Foundation::ICooperative;
|
use crate::lib::Foundation::ICooperative;
|
||||||
|
|
||||||
|
|
@ -23,14 +22,10 @@ enum ClientManagerMessages {}
|
||||||
/// This struct manages all connected users
|
/// This struct manages all connected users
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ClientManager {
|
pub struct ClientManager {
|
||||||
clients: Mutex<Vec<Arc<Client>>>,
|
clients: Mutex<HashMap<Uuid, Arc<Client>>>,
|
||||||
|
|
||||||
// weak_self: Mutex<Option<Weak<Self>>>,
|
|
||||||
|
|
||||||
server_channel: Sender<ServerMessages>,
|
server_channel: Sender<ServerMessages>,
|
||||||
|
|
||||||
// server_channel: Sender<ServerMessages>,
|
|
||||||
|
|
||||||
sender: Sender<ClientManagerMessages>,
|
sender: Sender<ClientManagerMessages>,
|
||||||
receiver: Receiver<ClientManagerMessages>,
|
receiver: Receiver<ClientManagerMessages>,
|
||||||
}
|
}
|
||||||
|
|
@ -53,29 +48,32 @@ impl ClientManager {
|
||||||
|
|
||||||
impl TClientManager<Client, ClientMessage> for ClientManager {
|
impl TClientManager<Client, ClientMessage> for ClientManager {
|
||||||
fn add_client(&self, client: std::sync::Arc<Client>) {
|
fn add_client(&self, client: std::sync::Arc<Client>) {
|
||||||
self.clients.lock().unwrap().push(client);
|
self.clients.lock().unwrap().insert(client.uuid, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_client(&self, _uuid: Uuid) {
|
fn remove_client(&self, uuid: Uuid) {
|
||||||
self.clients.lock().unwrap().sort();
|
let _ = self.clients.lock().unwrap().remove(&uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn message_client(&self, _id: Uuid, _msg: ClientMessage) {
|
fn send_message_to_client(&self, uuid: Uuid, msg: ClientMessage) {
|
||||||
todo!()
|
let clients = self.clients.lock().unwrap();
|
||||||
|
let client = clients.get(&uuid).unwrap();
|
||||||
|
client.send_message(msg);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ICooperative for ClientManager {
|
||||||
fn tick(&self) {
|
fn tick(&self) {
|
||||||
let client_list = self.clients.lock().unwrap();
|
|
||||||
let _ = client_list.iter().map(|client| client.tick());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::ClientManager;
|
// use super::ClientManager;
|
||||||
use std::sync::Arc;
|
// use std::sync::Arc;
|
||||||
use crate::lib::Foundation::{IOwner};
|
// use crate::lib::Foundation::{IOwner};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_get_ref() {
|
fn test_get_ref() {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::lib::server::client_management::client::ClientMessage;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
@ -7,7 +8,6 @@ use uuid::Uuid;
|
||||||
*/
|
*/
|
||||||
pub trait TClientManager<TClient,TClientMessage> {
|
pub trait TClientManager<TClient,TClientMessage> {
|
||||||
fn add_client(&self, client: Arc<TClient>);
|
fn add_client(&self, client: Arc<TClient>);
|
||||||
fn remove_client(&self, id: Uuid);
|
fn remove_client(&self, uuid: Uuid);
|
||||||
fn message_client(&self, id: Uuid, msg: TClientMessage);
|
fn send_message_to_client(&self, uuid: Uuid, msg: ClientMessage);
|
||||||
fn tick(&self, );
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue