added basic implementations for server
This commit is contained in:
parent
4c7c68c2a5
commit
962293b32f
|
|
@ -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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue