ffixing blocking calls in network manager
This commit is contained in:
parent
77fe320aa7
commit
2dcd6045ae
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue