diff options
author | tom barrett <spalf0@gmail.com> | 2019-02-19 13:24:25 -0600 |
---|---|---|
committer | tom barrett <spalf0@gmail.com> | 2019-02-19 13:24:25 -0600 |
commit | a4efade392aa7127c373b0247d39274cb0decd10 (patch) | |
tree | 72ff44e69917873ca9933c4a56794a15b99fb90c /src/server_connection.rs | |
parent | 892088d723fd3dc0aae969273331c2765f322e6f (diff) |
unified all server->client connection and brought logic to modules
Diffstat (limited to 'src/server_connection.rs')
-rw-r--r-- | src/server_connection.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/server_connection.rs b/src/server_connection.rs new file mode 100644 index 0000000..407b842 --- /dev/null +++ b/src/server_connection.rs @@ -0,0 +1,62 @@ +extern crate serde_json; + +use std::collections::HashMap; +use std::io::prelude::*; +use std::io::BufReader; +use std::net::TcpStream; + +use crate::mass::Mass; +use crate::modules::types::ModuleType; + +pub struct ServerConnection { + pub name: String, + pub module_type: ModuleType, + 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_with(Mass::new_ship); + + let send = serde_json::to_string(&ship.get_modules()).unwrap() + "\n"; + stream.write_all(send.as_bytes()).unwrap(); + + let mut recv = String::new(); + buff_r.read_line(&mut recv).unwrap(); + let module_type: ModuleType = serde_json::from_str(&recv.replace("\n", "")).unwrap(); + + stream.set_nonblocking(true).unwrap(); + ServerConnection { + name: String::from(name), + module_type, + stream, + buff_r, + open: true, + } + } + + pub fn receive(&mut self) -> String { + let mut recv = String::new(); + match self.buff_r.read_line(&mut recv) { + Ok(result) => { + if result == 0 { + self.open = false; + String::new() + } else { + recv.replace("\n", "") + } + } + Err(_) => String::new(), + } + } +} |