summaryrefslogtreecommitdiff
path: root/src/navigation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/navigation.rs')
-rw-r--r--src/navigation.rs37
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
+}