diff options
Diffstat (limited to 'src/server/connection.rs')
-rw-r--r-- | src/server/connection.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/server/connection.rs b/src/server/connection.rs new file mode 100644 index 0000000..8354d70 --- /dev/null +++ b/src/server/connection.rs @@ -0,0 +1,57 @@ +extern crate serde_json; + +use std::io::BufReader; +use std::io::prelude::*; +use std::net::TcpStream; +use std::collections::HashMap; + +use module::{Module, ModuleType}; +use mass::{Mass, MassType}; + +pub struct ServerConnection { + pub name : String, + pub module : Module, + pub stream : TcpStream, + pub buff_r : BufReader<TcpStream>, + pub open : bool, +} + +impl ServerConnection { + pub fn new(mut stream : TcpStream, masses : &mut HashMap<String, Mass>) -> ServerConnection { + let mut buff_r = BufReader::new(stream.try_clone().unwrap()); + + let mut recv = String::new(); + buff_r.read_line(&mut recv).unwrap(); + let name = &recv[..recv.find(":").unwrap()]; + + let ship = masses.entry(name.to_string()).or_insert(Mass::new_ship()); + + let send = match ship.mass_type { + MassType::Ship{ref modules, ..} => serde_json::to_string(modules).unwrap() + "\n", + _ => String::new(), + }; + stream.write(send.as_bytes()).unwrap(); + + let mut recv = String::new(); + buff_r.read_line(&mut recv).unwrap(); + let module : Module = serde_json::from_str(&recv.replace("\n","")).unwrap(); + + stream.set_nonblocking(true).unwrap(); + ServerConnection { + name : String::from(name), + module : module, + stream : stream, + buff_r : buff_r, + open : true, + } + } + + pub fn process(&mut self, mut masses : &mut HashMap<String, Mass>) { + self.open = match self.module.module_type { + ModuleType::Dashboard => self.server_dashboard(&mut masses), + ModuleType::Engines => self.server_engines(&mut masses), + ModuleType::Mining{..} => self.server_mining(&mut masses), + ModuleType::Navigation{..} => self.server_navigation(&mut masses), + }; + } +} |