From 160d7b6e50df6d818f6882c033398d49193bd804 Mon Sep 17 00:00:00 2001 From: tom barrett Date: Mon, 5 Mar 2018 08:14:14 -0600 Subject: -brought back downcasting, moved connection functions inside the structure --- src/navigation.rs | 57 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 23 deletions(-) (limited to 'src/navigation.rs') diff --git a/src/navigation.rs b/src/navigation.rs index a9c38b2..b615eaa 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -11,6 +11,7 @@ use mass::Mass; use ship::Ship; use math::distance; use astroid::Astroid; +use connection::Connection; pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : BufReader){ let stdout = stdout(); @@ -24,7 +25,7 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf let string_masses = data.split(";"); let mut masses : Vec> = Vec::new(); for string_mass in string_masses { - if string_mass.len() == 1 { + if string_mass.len() <= 1 { break; } masses.push(build_mass(string_mass)); @@ -76,30 +77,40 @@ pub fn client_navigation(name : String, mut stream : TcpStream, mut buff_r : Buf } } -pub fn server_navigation(masses : &mut Vec>, ship : &mut Box, mut stream : &TcpStream, buff_r : &mut BufReader) -> bool { - let within_range : Vec<&Box> = 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(); +impl Connection { + pub fn server_navigation(&mut self, masses : &mut Vec>) -> bool { + let position = masses[self.index].position(); + let range = masses[self.index].downcast_ref::().unwrap().range(); + + { + let within_range : Vec<&Box> = masses.iter().filter(|mass| + distance(position, mass.position()) < 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 self.stream.write(send.as_bytes()) { + Ok(_result) => (), + Err(_error) => return false, + } + } - if string_mass.len() > 0 { - let target = build_mass(&string_mass); - ship.give_target(masses.iter().position(|mass| - mass.name() == target.name())); + let mut string_mass = String::new(); + match self.buff_r.read_line(&mut string_mass) { + Ok(_result) => (), + Err(_error) => (), + } + if string_mass.len() > 0 { + let target = build_mass(&string_mass); + let t = masses.iter().position(|mass| + mass.name() == target.name()); + masses[self.index].downcast_mut::().unwrap().give_target(t); + } + true } - - true } fn build_mass(string_mass : &str) -> Box { -- cgit v1.2.3