diff options
Diffstat (limited to 'src/navigation.rs')
-rw-r--r-- | src/navigation.rs | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/navigation.rs b/src/navigation.rs index 978c154..430ebc0 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -1,6 +1,5 @@ use std::net::TcpStream; use std::io::{BufRead, BufReader}; - use std::io::{stdout, Read, Write, stdin}; use termion::raw::IntoRawMode; use termion::async_stdin; @@ -16,7 +15,7 @@ use ship::Ship; use math::distance; use astroid::Astroid; -pub fn Navigation(name : String, mut stream : TcpStream, mut buff_r : BufReader<TcpStream>){ +pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : BufReader<TcpStream>){ let stdout = stdout(); let mut stdout = stdout.lock().into_raw_mode().unwrap(); let mut stdin = async_stdin().bytes(); @@ -92,3 +91,37 @@ pub fn Navigation(name : String, mut stream : TcpStream, mut buff_r : BufReader< stdout.flush().unwrap(); } } + +pub fn server_navigation(masses : &mut Vec<Box<Mass>>, index : usize, mut stream : &TcpStream, buff_r : &mut BufReader<TcpStream>) -> bool { + let ship = masses[index].downcast_ref::<Ship>().unwrap(); + + let within_range : Vec<&Box<Mass>> = masses.iter().filter(|mass| + distance(ship.position(), mass.position()) < ship.range()).collect(); + + let mut send = String::new(); + for mass in within_range { + send.push_str(&mass.serialize()); + send.push_str(";"); + } + send.push_str("\n"); + match stream.write(send.as_bytes()) { + Ok(_result) => (), + Err(_error) => return false, + } + + /* + let mut string_mass = String::new(); + buff_r.read_line(&mut string_mass).unwrap(); + if string_mass.len() > 0 { + let json = &mut serde_json::de::Deserializer::from_slice(string_mass.as_bytes()); + let mut deserialized : Box<Deserializer> = Box::new(Deserializer::erase(json)); + if string_mass.contains("Ship") { + let mass : Ship = erased_serde::deserialize(&mut deserialized).unwrap(); + } + else { + let mass : Astroid = erased_serde::deserialize(&mut deserialized).unwrap(); + } + } + */ + true +} |