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