implementing common traits for server

This commit is contained in:
michael-bailey 2021-03-15 16:35:42 +00:00
parent 7731e18d8b
commit 4c7c68c2a5
4 changed files with 53 additions and 11 deletions

View File

@ -7,7 +7,7 @@ use std::sync::Arc;
use std::sync::Mutex; use std::sync::Mutex;
use std::thread; use std::thread;
use crossbeam::{unbounded, Receiver, Sender}; use crossbeam_channel::{unbounded, Receiver, Sender};
enum Message { enum Message {
NewJob(Job), NewJob(Job),

View File

@ -23,6 +23,7 @@ pub struct ClientManager {
clients: Mutex<Vec<Arc<Client>>>, clients: Mutex<Vec<Arc<Client>>>,
weak_self: Mutex<Option<Weak<Self>>>, weak_self: Mutex<Option<Weak<Self>>>,
server_ref: Mutex<Option<Weak<Server>>,
sender: Sender<ClientManagerMessages>, sender: Sender<ClientManagerMessages>,
receiver: Receiver<ClientManagerMessages>, receiver: Receiver<ClientManagerMessages>,
@ -53,8 +54,6 @@ impl ClientManager {
manager_ref manager_ref
} }
fn set_ref(&self, reference: Arc<Self>) { fn set_ref(&self, reference: Arc<Self>) {
let mut lock = self.weak_self.lock().unwrap(); let mut lock = self.weak_self.lock().unwrap();
*lock = Some(Arc::downgrade(&reference)); *lock = Some(Arc::downgrade(&reference));
@ -98,7 +97,7 @@ impl IOwner<Client> for ClientManager{
} }
fn get_ref(&self) -> Weak<Self> { fn get_ref(&self) -> Weak<Self> {
self.weak_self.lock().unwrap().clone().unwrap() self.weak_self.lock().unwrap().unwrap().clone()
} }
} }

View File

@ -1,5 +1,46 @@
pub mod client_management; 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<ClientManager>,
}
impl Server {
pub fn new() -> Arc<Server> {
let listener = TcpListener::bind("0.0.0.0:5600").expect("Could not bind to address");
let server: Arc<Self> = Arc::new(Server {
server_socket: listener,
weak_self: Mutex::new(None),
client_manager: ClientManager::new()
});
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()
}
}
impl ICooperative for Server{
fn tick(&self) {
}
}

View File

@ -1,6 +1,8 @@
mod lib; mod lib;
use clap::{App, Arg}; use clap::{App, Arg};
use crate::lib::server::Server;
fn main() { fn main() {
let _args = App::new("--rust chat server--") let _args = App::new("--rust chat server--")
@ -8,15 +10,15 @@ fn main() {
.author("Mitchel Hardie <mitch161>, Michael Bailey <michael-bailey>") .author("Mitchel Hardie <mitch161>, Michael Bailey <michael-bailey>")
.about("this is a chat server developed in rust, depending on the version one of two implementations will be used") .about("this is a chat server developed in rust, depending on the version one of two implementations will be used")
.arg( .arg(
Arg::new("config") Arg::with_name("config")
.short('p') .short("p")
.long("port") .long("port")
.value_name("PORT") .value_name("PORT")
.about("sets the port the server listens on.") .help("sets the port the server runs on.")
.takes_value(true)) .takes_value(true))
.get_matches(); .get_matches();
// creating the server object let mut server = Server::new();
} }