X-Git-Url: http://git.euphorik.ch/?p=crypto_lab1.git;a=blobdiff_plain;f=src%2Fserver.rs;h=b655ae7207630512da81a246dcd61f12e1df1fe7;hp=3eb1a465bbaba28bc6fd89b3314d394ce6404fb7;hb=db8678377c7ea4fa7183a54c1bfe095e051882a8;hpb=aee28ef5d1be59c0db218d7130fd1ae2314cc970 diff --git a/src/server.rs b/src/server.rs index 3eb1a46..b655ae7 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,19 +1,17 @@ -use std::io::{ TcpListener, TcpStream, Acceptor, Listener, IoError, IoResult }; +use std::io::{ TcpListener, TcpStream, Acceptor, Listener, IoError, IoResult, EndOfFile }; use std::io::net::tcp::{ TcpAcceptor }; -use command::{ Command, Packet, Error }; -use crypto::Crypto; +use packet::{ Packet, IOReadError }; pub struct Server { - acceptor: TcpAcceptor, - crypto: Crypto + acceptor: TcpAcceptor } 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() + acceptor: acceptor.clone() }; spawn(proc() { @@ -36,13 +34,28 @@ impl Server { self.acceptor.close_accept() } - fn handle_client(mut stream: TcpStream) { - println!("new connection!"); + fn handle_client(mut stream: TcpStream) { 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") + + loop { + // stream.set_timeout(Some(1000000000)); + match Packet::read(&mut stream) { + Ok(packet) => { + if packet.timestamp <= current_timestamp { + println!("Error, timestamp mismatch, current timestamp: {}, packet received: {}", current_timestamp, packet); + } else { + current_timestamp += 1; + println!("Receive packet: {}", packet); + } + }, + // Socket has been closed. + Err(IOReadError(IoError { kind: EndOfFile, .. })) => { + return; + }, + Err(e) => { + println!("Read error: {}", e) + } + } } } } \ No newline at end of file