added basic implementations for server

This commit is contained in:
michael-bailey 2021-03-15 17:11:50 +00:00
parent 4c7c68c2a5
commit 962293b32f
1 changed files with 16 additions and 20 deletions

View File

@ -1,41 +1,37 @@
pub mod client_management; pub mod client_management;
use crossbeam_channel::{Sender, Receiver, unbounded};
use std::sync::{Arc, Weak, Mutex}; use std::sync::{Arc, Weak, Mutex};
use std::net::TcpListener; use std::net::TcpListener;
use crate::lib::server::client_management::ClientManager; use crate::lib::server::client_management::ClientManager;
use crate::lib::Foundation::{IOwner, IOwned, ICooperative}; use crate::lib::Foundation::{IOwner, IOwned, ICooperative};
use client_management::client::Client;
enum ServerMessages {
ClientConnected(Client),
}
pub struct Server { pub struct Server {
server_socket: TcpListener, server_socket: TcpListener,
client_manager: Arc<ClientManager>, client_manager: Arc<ClientManager>,
sender: Sender<ServerMessages>,
receiver: Receiver<ServerMessages>,
} }
impl Server { impl Server {
pub fn new() -> Arc<Server> { pub fn new() -> Arc<Server> {
let listener = TcpListener::bind("0.0.0.0:5600").expect("Could not bind to address"); let listener = TcpListener::bind("0.0.0.0:5600").expect("Could not bind to address");
let (sender, receiver) = unbounded();
let server: Arc<Self> = Arc::new(Server { Arc::new(Server {
server_socket: listener, server_socket: listener,
weak_self: Mutex::new(None), client_manager: ClientManager::new(sender),
client_manager: ClientManager::new()
}); sender,
receiver,
server. })
}
}
impl IOwner<ClientManager> for Server {
fn add_child(&self, child: Arc<ClientManager>) {
self.client_manager
}
fn get_ref(&self) -> Weak<Self> {
self.weak_self.lock().unwrap().unwrap().clone()
} }
} }