b655ae7207630512da81a246dcd61f12e1df1fe7
1 use std
::io
::{ TcpListener
, TcpStream
, Acceptor
, Listener
, IoError
, IoResult
, EndOfFile
};
2 use std
::io
::net
::tcp
::{ TcpAcceptor
};
3 use packet
::{ Packet
, IOReadError
};
10 pub fn new(port
: u16) -> IoResult
<Server
> {
11 let mut acceptor
= try!(TcpListener
::bind("127.0.0.1", port
).listen());
14 acceptor
: acceptor
.clone()
19 for stream
in acceptor
.incoming() {
22 Ok(stream
) => spawn(proc() {
23 Server
::handle_client(stream
);
33 pub fn close(&mut self) -> IoResult
<()> {
34 self.acceptor
.close_accept()
37 fn handle_client(mut stream
: TcpStream
) {
38 let mut current_timestamp
= 0u64;
41 // stream.set_timeout(Some(1000000000));
42 match Packet
::read(&mut stream
) {
44 if packet
.timestamp
<= current_timestamp
{
45 println!("Error, timestamp mismatch, current timestamp: {}, packet received: {}", current_timestamp
, packet
);
47 current_timestamp
+= 1;
48 println!("Receive packet: {}", packet
);
51 // Socket has been closed.
52 Err(IOReadError(IoError
{ kind
: EndOfFile
, .. })) => {
56 println!("Read error: {}", e
)