diff --git a/server/src/network_manager.rs b/server/src/network_manager.rs index aab9729..be4d379 100644 --- a/server/src/network_manager.rs +++ b/server/src/network_manager.rs @@ -1,3 +1,4 @@ +use std::sync::Mutex; use std::collections::VecDeque; use std::net::TcpStream; use crate::client::Client; @@ -8,6 +9,8 @@ use std::sync::Arc; use std::net::TcpListener; use std::io::Write; use std::io::BufRead; +use std::io::Read; + use crossbeam_channel::{Sender}; @@ -16,7 +19,7 @@ use foundation::messages::network::{NetworkSockIn, NetworkSockOut}; pub struct NetworkManager { listener: TcpListener, - connection_queue: VecDeque, + connection_queue: Mutex>, server_channel: Sender, } @@ -34,7 +37,7 @@ impl NetworkManager { Arc::new(NetworkManager { listener, - connection_queue: VecDeque::new(), + connection_queue: Mutex::new(VecDeque::new()), server_channel, }) } @@ -44,6 +47,45 @@ impl ICooperative for NetworkManager { fn tick(&self) { println!("[NetworkManager]: Tick!"); + + // fetch new connections and add them to the client queue + let mut lock = self.connection_queue.lock().unwrap(); + for connection in self.listener.incoming() { + match connection { + Ok(stream) => { + &mut lock.push_back(stream); + }, + Err(e) => { + println!("[Network manager]: error getting stream: {:?}", e); + }, + } + } + drop(lock); + + // attempt to handle current connections + let mut buffer = String::new(); + let mut lock = self.connection_queue.lock().unwrap(); + for i in 1..lock.len() { + let mut stream = lock.pop_front(); + if let Some(stream) = stream { + + let mut writer = BufWriter::new(stream.try_clone().unwrap()); + let mut reader = BufReader::new(stream.try_clone().unwrap()); + + + + + if let Ok(_) = reader.read_line(&mut buffer) { + println!("recieved"); + } else { + continue; + } + } + } + drop(lock); + + + // get all new connections // handle each request println!("[NetworkManager]: handling new connections!"); @@ -52,7 +94,6 @@ impl ICooperative for NetworkManager { Ok(stream) => { stream.set_nonblocking(false).expect("[NetworkManager]: cant set non-blocking on connection"); - // create buffered writers let mut reader = BufReader::new(stream.try_clone().unwrap()); let mut writer = BufWriter::new(stream.try_clone().unwrap());