author | alfadur |
Tue, 09 Apr 2019 21:08:35 +0300 | |
changeset 14800 | f43ab2bd76ae |
parent 14712 | 2071da901c63 |
child 14804 | b3adc030104b |
permissions | -rw-r--r-- |
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
1 |
#![allow(unused_imports)] |
13421
d1368c776a4f
Enable all lints from the rust-2018-idioms suite.
marmistrz
parents:
13414
diff
changeset
|
2 |
#![deny(bare_trait_objects)] |
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
3 |
|
14478 | 4 |
use log::*; |
12853 | 5 |
use mio::net::*; |
12125 | 6 |
use mio::*; |
7 |
||
14478 | 8 |
mod protocol; |
9 |
mod server; |
|
12125 | 10 |
mod utils; |
11 |
||
13666 | 12 |
use crate::server::network::NetworkLayer; |
13414 | 13 |
use std::time::Duration; |
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
14 |
|
12125 | 15 |
fn main() { |
13769 | 16 |
env_logger::init(); |
12137
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12133
diff
changeset
|
17 |
|
14478 | 18 |
info!( |
19 |
"Hedgewars game server, protocol {}", |
|
20 |
utils::PROTOCOL_VERSION |
|
21 |
); |
|
12125 | 22 |
|
23 |
let address = "0.0.0.0:46631".parse().unwrap(); |
|
12126 | 24 |
let listener = TcpListener::bind(&address).unwrap(); |
12125 | 25 |
|
26 |
let poll = Poll::new().unwrap(); |
|
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
27 |
let mut hw_network = NetworkLayer::new(listener, 1024, 512); |
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
28 |
hw_network.register_server(&poll).unwrap(); |
12125 | 29 |
|
30 |
let mut events = Events::with_capacity(1024); |
|
31 |
||
32 |
loop { |
|
13414 | 33 |
let timeout = if hw_network.has_pending_operations() { |
34 |
Some(Duration::from_millis(1)) |
|
35 |
} else { |
|
36 |
None |
|
37 |
}; |
|
38 |
poll.poll(&mut events, timeout).unwrap(); |
|
12125 | 39 |
|
40 |
for event in events.iter() { |
|
12853 | 41 |
if event.readiness() & Ready::readable() == Ready::readable() { |
12127 | 42 |
match event.token() { |
14800
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14712
diff
changeset
|
43 |
utils::SERVER_TOKEN => hw_network.accept_client(&poll).unwrap(), |
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14712
diff
changeset
|
44 |
#[cfg(feature = "official-server")] |
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14712
diff
changeset
|
45 |
utils::IO_TOKEN => hw_network.handle_io_result(), |
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
46 |
Token(tok) => hw_network.client_readable(&poll, tok).unwrap(), |
12127 | 47 |
} |
48 |
} |
|
12853 | 49 |
if event.readiness() & Ready::writable() == Ready::writable() { |
12127 | 50 |
match event.token() { |
14800
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14712
diff
changeset
|
51 |
utils::SERVER_TOKEN => unreachable!(), |
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14712
diff
changeset
|
52 |
utils::IO_TOKEN => unreachable!(), |
13119
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12853
diff
changeset
|
53 |
Token(tok) => hw_network.client_writable(&poll, tok).unwrap(), |
12127 | 54 |
} |
12125 | 55 |
} |
14478 | 56 |
// if event.kind().is_hup() || event.kind().is_error() { |
57 |
// match event.token() { |
|
58 |
// utils::SERVER => unreachable!(), |
|
59 |
// Token(tok) => server.client_error(&poll, tok).unwrap(), |
|
60 |
// } |
|
61 |
// } |
|
12125 | 62 |
} |
13414 | 63 |
hw_network.on_idle(&poll).unwrap(); |
12125 | 64 |
} |
65 |
} |