implementing common traits for server
This commit is contained in:
parent
7731e18d8b
commit
4c7c68c2a5
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
10
src/main.rs
10
src/main.rs
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue