Pulling basic server functionality into development #9

Merged
michael-bailey merged 22 commits from network-client into Development 2021-04-13 17:17:58 +00:00
1 changed files with 44 additions and 3 deletions
Showing only changes of commit 2dcd6045ae - Show all commits

View File

@ -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<TcpStream>,
connection_queue: Mutex<VecDeque<TcpStream>>,
server_channel: Sender<ServerMessage>,
}
@ -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());