1ce5f955a80539cd115d5bf69e5caf6e04b0de35
[crypto_lab1.git] / src / server.rs
1 use std::io::{ TcpListener, TcpStream, Acceptor, Listener, IoError, IoResult };
2 use std::io::net::tcp::{ TcpAcceptor };
3 use command::{ Command, Packet, Error };
4
5 pub struct Server {
6 acceptor: TcpAcceptor
7 }
8
9 impl Server {
10 pub fn new(port: u16) -> IoResult<Server> {
11 let mut acceptor = try!(TcpListener::bind("127.0.0.1", port).listen());
12
13 let server = Server {
14 acceptor: acceptor.clone()
15 };
16
17 spawn(proc() {
18 loop {
19 for stream in acceptor.incoming() {
20 match stream {
21 Err(_) => return,
22 Ok(stream) => spawn(proc() {
23 Server::handle_client(stream);
24 })
25 }
26 }
27 }
28 });
29
30 Ok(server)
31 }
32
33 pub fn close(&mut self) -> IoResult<()> {
34 self.acceptor.close_accept()
35 }
36
37 fn handle_client(mut stream: TcpStream) {
38
39 let mut current_timestamp = 0u64;
40
41 match Packet::read(&mut stream) {
42 Ok(Command(packet)) => println!("CommandPacket"),
43 Ok(Error(packet)) => println!("AnswerPacket"),
44 Err(io_error) => println!("IO Error")
45 }
46 }
47 }