42 .opt_str("p") |
46 .opt_str("p") |
43 .and_then(|s| u16::from_str(&s).ok()) |
47 .and_then(|s| u16::from_str(&s).ok()) |
44 .unwrap_or(46631); |
48 .unwrap_or(46631); |
45 let address = format!("0.0.0.0:{}", port).parse().unwrap(); |
49 let address = format!("0.0.0.0:{}", port).parse().unwrap(); |
46 |
50 |
47 let listener = TcpListener::bind(&address).unwrap(); |
51 let listener = TcpListener::bind(address).unwrap(); |
48 |
52 |
49 let poll = Poll::new().unwrap(); |
53 let mut poll = Poll::new().unwrap(); |
50 let mut hw_builder = NetworkLayerBuilder::default().with_listener(listener); |
54 let mut hw_builder = NetworkLayerBuilder::default().with_listener(listener); |
51 |
55 |
52 #[cfg(feature = "tls-connections")] |
56 #[cfg(feature = "tls-connections")] |
53 { |
57 { |
54 let address = format!("0.0.0.0:{}", port + 1).parse().unwrap(); |
58 let address = format!("0.0.0.0:{}", port + 1).parse().unwrap(); |
55 hw_builder = hw_builder.with_secure_listener(TcpListener::bind(&address).unwrap()); |
59 hw_builder = hw_builder.with_secure_listener(TcpListener::bind(address).unwrap()); |
56 } |
60 } |
57 |
61 |
58 let mut hw_network = hw_builder.build(); |
62 let mut hw_network = hw_builder.build(&poll); |
59 hw_network.register(&poll).unwrap(); |
63 hw_network.register(&poll).unwrap(); |
60 |
64 |
61 let mut events = Events::with_capacity(1024); |
65 let mut events = Events::with_capacity(1024); |
|
66 |
|
67 let mut time = Instant::now(); |
62 |
68 |
63 loop { |
69 loop { |
64 let timeout = if hw_network.has_pending_operations() { |
70 let timeout = if hw_network.has_pending_operations() { |
65 Some(Duration::from_millis(1)) |
71 Some(Duration::from_millis(1)) |
66 } else { |
72 } else { |
67 None |
73 None |
68 }; |
74 }; |
|
75 |
69 poll.poll(&mut events, timeout).unwrap(); |
76 poll.poll(&mut events, timeout).unwrap(); |
70 |
77 |
71 for event in events.iter() { |
78 for event in events.iter() { |
72 if event.readiness() & Ready::readable() == Ready::readable() { |
79 if event.is_readable() { |
73 match event.token() { |
80 match event.token() { |
74 token @ (utils::SERVER_TOKEN | utils::SECURE_SERVER_TOKEN) => { |
81 token @ (utils::SERVER_TOKEN | utils::SECURE_SERVER_TOKEN) => { |
75 match hw_network.accept_client(&poll, token) { |
82 match hw_network.accept_client(&poll, token) { |
76 Ok(()) => (), |
83 Ok(()) => (), |
77 Err(e) => debug!("Error accepting client: {}", e), |
84 Err(e) => debug!("Error accepting client: {}", e), |
78 } |
85 } |
79 } |
86 } |
80 utils::TIMER_TOKEN => match hw_network.handle_timeout(&poll) { |
|
81 Ok(()) => (), |
|
82 Err(e) => debug!("Error in timer event: {}", e), |
|
83 }, |
|
84 #[cfg(feature = "official-server")] |
87 #[cfg(feature = "official-server")] |
85 utils::IO_TOKEN => match hw_network.handle_io_result(&poll) { |
88 utils::IO_TOKEN => match hw_network.handle_io_result(&poll) { |
86 Ok(()) => (), |
89 Ok(()) => (), |
87 Err(e) => debug!("Error in IO task: {}", e), |
90 Err(e) => debug!("Error in IO task: {}", e), |
88 }, |
91 }, |
90 Ok(()) => (), |
93 Ok(()) => (), |
91 Err(e) => debug!("Error reading from client socket {}: {}", token, e), |
94 Err(e) => debug!("Error reading from client socket {}: {}", token, e), |
92 }, |
95 }, |
93 } |
96 } |
94 } |
97 } |
95 if event.readiness() & Ready::writable() == Ready::writable() { |
98 if event.is_writable() { |
96 match event.token() { |
99 match event.token() { |
97 utils::SERVER_TOKEN |
100 utils::SERVER_TOKEN | utils::SECURE_SERVER_TOKEN | utils::IO_TOKEN => { |
98 | utils::SECURE_SERVER_TOKEN |
101 unreachable!() |
99 | utils::TIMER_TOKEN |
102 } |
100 | utils::IO_TOKEN => unreachable!(), |
|
101 Token(token) => match hw_network.client_writable(&poll, token) { |
103 Token(token) => match hw_network.client_writable(&poll, token) { |
102 Ok(()) => (), |
104 Ok(()) => (), |
103 Err(e) => debug!("Error writing to client socket {}: {}", token, e), |
105 Err(e) => debug!("Error writing to client socket {}: {}", token, e), |
104 }, |
106 }, |
105 } |
107 } |