summaryrefslogtreecommitdiff
path: root/src/connection.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/connection.rs')
-rw-r--r--src/connection.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/connection.rs b/src/connection.rs
new file mode 100644
index 0000000..0276558
--- /dev/null
+++ b/src/connection.rs
@@ -0,0 +1,56 @@
+use std::io::prelude::*;
+use std::io::BufReader;
+use std::net::{TcpListener, TcpStream};
+
+extern crate serde_json;
+
+use ship::Ship;
+use module::{Module, from_primitive};
+
+pub struct Connection {
+ name : String,
+ ship : Ship,
+ module : Module,
+ stream : TcpStream,
+ buff_r : BufReader<TcpStream>,
+ pub open : bool,
+}
+
+impl Connection {
+ pub fn new(mut stream : TcpStream) -> Connection {
+ let mut buff_r = BufReader::new(stream.try_clone().unwrap());
+
+ let mut data = String::new();
+ buff_r.read_line(&mut data);
+ let name = &data[..data.find(":").unwrap()];
+
+ let modules = b"dashboard,navigation,engine\n";
+ stream.write(modules);
+
+ let mut data = String::new();
+ buff_r.read_line(&mut data);
+ let num = data.replace("\n", "");
+ let module = from_primitive(num.parse::<isize>().unwrap());
+
+ Connection {
+ name : String::from(name),
+ ship : Ship::new(),
+ module : module,
+ stream : stream,
+ buff_r : buff_r,
+ open : true,
+ }
+ }
+
+ pub fn process(&mut self) {
+ match self.module {
+ Module::Dashboard => {
+ let mut send = serde_json::to_string(&self.ship).unwrap();
+ send.push_str("\n");
+ self.stream.write(send.as_bytes());
+ }
+ _ => ()
+ }
+ }
+}
+