summaryrefslogtreecommitdiff
path: root/src/server/engines.rs
diff options
context:
space:
mode:
authortom barrett <spalf0@gmail.com>2019-02-13 13:25:00 -0600
committertom barrett <spalf0@gmail.com>2019-02-13 13:25:00 -0600
commit284cac8f4034f15e7edeba5c8232a770fc082e20 (patch)
tree8f73230bae89c3bf796e47f7c52ac84f7015bd09 /src/server/engines.rs
parent070485e093dc540a5db9650d438cffe3d18d3883 (diff)
added engine fuel and simplified/unified txrx from server
Diffstat (limited to 'src/server/engines.rs')
-rw-r--r--src/server/engines.rs31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/server/engines.rs b/src/server/engines.rs
index f3e68f0..86ef5ec 100644
--- a/src/server/engines.rs
+++ b/src/server/engines.rs
@@ -1,12 +1,17 @@
extern crate serde_json;
use std::collections::HashMap;
-use std::io::BufRead;
use std::io::Write;
use crate::mass::{Mass, MassType};
use crate::modules::navigation::NavigationStatus;
-use crate::server::connection::ServerConnection;
+use crate::server::connection::{receive, ServerConnection};
+
+#[derive(Serialize, Deserialize, Debug, Clone)]
+pub struct EnginesData {
+ pub has_target: bool,
+ pub fuel: f64,
+}
impl ServerConnection {
pub fn server_engines(&mut self, masses: &mut HashMap<String, Mass>) {
@@ -21,29 +26,27 @@ impl ServerConnection {
{
let navigation = navigation.clone().unwrap();
let engines = engines.as_mut().unwrap();
- let targeted = navigation.status == NavigationStatus::Targeted;
- let send = serde_json::to_string(&targeted).unwrap() + "\n";
- if let Err(_err) = self.stream.write(send.as_bytes()) {
- self.open = false;
- }
+ let engines_data = EnginesData {
+ has_target: navigation.status == NavigationStatus::Targeted,
+ fuel: engines.fuel,
+ };
+ let send = serde_json::to_string(&engines_data).unwrap() + "\n";
+ self.open = self.stream.write(send.as_bytes()).is_ok();
let target = match navigation.target_name {
Some(name) => masses.get(&name),
None => None,
};
- let mut recv = String::new();
- if let Ok(result) = self.buff_r.read_line(&mut recv) {
- engines.give_client_data(
+ match receive(&mut self.buff_r) {
+ Some(recv) => engines.give_client_data(
ship.position.clone(),
ship.velocity.clone(),
target,
recv,
- );
- if result == 0 {
- self.open = false;
- }
+ ),
+ None => self.open = false,
}
}