X-Git-Url: http://git.euphorik.ch/?p=crypto_lab1.git;a=blobdiff_plain;f=src%2Fserver.rs;fp=src%2Fserver.rs;h=3eb1a465bbaba28bc6fd89b3314d394ce6404fb7;hp=0000000000000000000000000000000000000000;hb=aee28ef5d1be59c0db218d7130fd1ae2314cc970;hpb=73730f083cb2d305a039d49d9e34ff9978fe20be diff --git a/src/server.rs b/src/server.rs new file mode 100644 index 0000000..3eb1a46 --- /dev/null +++ b/src/server.rs @@ -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 { + 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