First commit.
[crypto_lab1.git] / src / server.rs
diff --git a/src/server.rs b/src/server.rs
new file mode 100644 (file)
index 0000000..3eb1a46
--- /dev/null
@@ -0,0 +1,48 @@
+use std::io::{ TcpListener, TcpStream, Acceptor, Listener, IoError, IoResult };
+use std::io::net::tcp::{ TcpAcceptor };
+use command::{ Command, Packet, Error };
+use crypto::Crypto;
+
+pub struct Server {
+   acceptor: TcpAcceptor,
+   crypto: Crypto
+}
+
+impl Server {
+   pub fn new(port: u16) -> IoResult<Server> {
+      let mut acceptor = try!(TcpListener::bind("127.0.0.1", port).listen());
+      let server = Server { 
+         acceptor: acceptor.clone(),  
+         crypto: Crypto::new()
+      };
+      
+      spawn(proc() {
+         loop {
+            for stream in acceptor.incoming() {
+               match stream {
+                  Err(_) => return,
+                  Ok(stream) => spawn(proc() {
+                     Server::handle_client(stream);
+                  })
+               }
+            }
+         }
+      });
+      
+      Ok(server)
+   }
+   
+   pub fn close(&mut self) -> IoResult<()> {
+      self.acceptor.close_accept()
+   }
+   
+   fn handle_client(mut stream: TcpStream) {   
+      println!("new connection!");
+      let mut current_timestamp = 0u64;
+      match Packet::read(&mut stream) {
+         Ok(Command(packet)) => println!("CommandPacket"),
+         Ok(Error(packet)) => println!("AnswerPacket"),
+         Err(io_error) => println!("IO Error")
+      }
+   }
+}
\ No newline at end of file