diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 6e06bd7..0b03722 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use std::sync::Mutex; use std::thread; -use crossbeam::{unbounded, Receiver, Sender}; +use crossbeam_channel::{unbounded, Receiver, Sender}; enum Message { NewJob(Job), diff --git a/src/lib/server/client_management/mod.rs b/src/lib/server/client_management/mod.rs index 19f3b13..330a0ed 100644 --- a/src/lib/server/client_management/mod.rs +++ b/src/lib/server/client_management/mod.rs @@ -23,6 +23,7 @@ pub struct ClientManager { clients: Mutex>>, weak_self: Mutex>>, + server_ref: Mutex>, sender: Sender, receiver: Receiver, @@ -53,8 +54,6 @@ impl ClientManager { manager_ref } - - fn set_ref(&self, reference: Arc) { let mut lock = self.weak_self.lock().unwrap(); *lock = Some(Arc::downgrade(&reference)); @@ -98,7 +97,7 @@ impl IOwner for ClientManager{ } fn get_ref(&self) -> Weak { - self.weak_self.lock().unwrap().clone().unwrap() + self.weak_self.lock().unwrap().unwrap().clone() } } diff --git a/src/lib/server/mod.rs b/src/lib/server/mod.rs index 5ab86fa..097b104 100644 --- a/src/lib/server/mod.rs +++ b/src/lib/server/mod.rs @@ -1,5 +1,46 @@ pub mod client_management; -// pub mod server; -// pub mod server_v3; -pub struct _Server {} +use std::sync::{Arc, Weak, Mutex}; +use std::net::TcpListener; + +use crate::lib::server::client_management::ClientManager; +use crate::lib::Foundation::{IOwner, IOwned, ICooperative}; + +pub struct Server { + server_socket: TcpListener, + + client_manager: Arc, +} + +impl Server { + pub fn new() -> Arc { + + let listener = TcpListener::bind("0.0.0.0:5600").expect("Could not bind to address"); + + let server: Arc = Arc::new(Server { + server_socket: listener, + weak_self: Mutex::new(None), + client_manager: ClientManager::new() + }); + + server. + } + + +} + +impl IOwner for Server { + fn add_child(&self, child: Arc) { + self.client_manager + } + + fn get_ref(&self) -> Weak { + self.weak_self.lock().unwrap().unwrap().clone() + } +} + +impl ICooperative for Server{ + fn tick(&self) { + + } +} diff --git a/src/main.rs b/src/main.rs index 57abb62..0f29b99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ mod lib; use clap::{App, Arg}; + +use crate::lib::server::Server; fn main() { let _args = App::new("--rust chat server--") @@ -8,15 +10,15 @@ fn main() { .author("Mitchel Hardie , Michael Bailey ") .about("this is a chat server developed in rust, depending on the version one of two implementations will be used") .arg( - Arg::new("config") - .short('p') + Arg::with_name("config") + .short("p") .long("port") .value_name("PORT") - .about("sets the port the server listens on.") + .help("sets the port the server runs on.") .takes_value(true)) .get_matches(); - // creating the server object + let mut server = Server::new(); }