+++ /dev/null
-use std::io::{ TcpListener, TcpStream, Acceptor, Listener, IoError, IoResult, EndOfFile };
-use std::io::net::tcp::{ TcpAcceptor };
-use packet::{ Packet, IOReadError };
-
-pub struct Server {
- acceptor: TcpAcceptor
-}
-
-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()
- };
-
- 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) {
- let mut current_timestamp = 0u64;
-
- 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