author | alfadur |
Fri, 07 Sep 2018 04:16:05 +0300 | |
changeset 13805 | 0118b7412570 |
parent 13804 | c8fd12db6215 |
child 13809 | 201d86010a8b |
permissions | -rw-r--r-- |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
1 |
#![allow(unused_imports)] |
13426
d1368c776a4f
Enable all lints from the rust-2018-idioms suite.
marmistrz
parents:
13419
diff
changeset
|
2 |
#![deny(bare_trait_objects)] |
13671 | 3 |
#![feature(rust_2018_preview)] |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
4 |
|
12130 | 5 |
extern crate rand; |
6 |
extern crate mio; |
|
12131 | 7 |
extern crate slab; |
12132 | 8 |
extern crate netbuf; |
13428 | 9 |
extern crate base64; |
12138 | 10 |
#[macro_use] |
11 |
extern crate nom; |
|
12142
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
12 |
#[macro_use] |
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
13 |
extern crate log; |
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
14 |
extern crate env_logger; |
13801 | 15 |
#[cfg(test)] |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
16 |
#[macro_use] extern crate proptest; |
13527
282e5e54386f
Something down in the food chain already uses bitflags, so might as well switch to them
alfadur
parents:
13435
diff
changeset
|
17 |
#[macro_use] extern crate bitflags; |
13534 | 18 |
extern crate serde; |
19 |
extern crate serde_yaml; |
|
13804 | 20 |
#[cfg(feature = "tls-connections")] |
21 |
extern crate openssl; |
|
13534 | 22 |
#[macro_use] extern crate serde_derive; |
12130 | 23 |
|
12131 | 24 |
//use std::io::*; |
12130 | 25 |
//use rand::Rng; |
26 |
//use std::cmp::Ordering; |
|
12858 | 27 |
use mio::net::*; |
12130 | 28 |
use mio::*; |
29 |
||
30 |
mod utils; |
|
12131 | 31 |
mod server; |
12134 | 32 |
mod protocol; |
12130 | 33 |
|
13671 | 34 |
use crate::server::network::NetworkLayer; |
13419 | 35 |
use std::time::Duration; |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
36 |
|
12130 | 37 |
fn main() { |
13802 | 38 |
env_logger::init(); |
12142
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
39 |
|
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
40 |
info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION); |
12130 | 41 |
|
42 |
let address = "0.0.0.0:46631".parse().unwrap(); |
|
12131 | 43 |
let listener = TcpListener::bind(&address).unwrap(); |
12130 | 44 |
|
45 |
let poll = Poll::new().unwrap(); |
|
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
46 |
let mut hw_network = NetworkLayer::new(listener, 1024, 512); |
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
47 |
hw_network.register_server(&poll).unwrap(); |
12130 | 48 |
|
49 |
let mut events = Events::with_capacity(1024); |
|
50 |
||
51 |
loop { |
|
13419 | 52 |
let timeout = if hw_network.has_pending_operations() { |
53 |
Some(Duration::from_millis(1)) |
|
54 |
} else { |
|
55 |
None |
|
56 |
}; |
|
57 |
poll.poll(&mut events, timeout).unwrap(); |
|
12130 | 58 |
|
59 |
for event in events.iter() { |
|
12858 | 60 |
if event.readiness() & Ready::readable() == Ready::readable() { |
12132 | 61 |
match event.token() { |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
62 |
utils::SERVER => hw_network.accept_client(&poll).unwrap(), |
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
63 |
Token(tok) => hw_network.client_readable(&poll, tok).unwrap(), |
12132 | 64 |
} |
65 |
} |
|
12858 | 66 |
if event.readiness() & Ready::writable() == Ready::writable() { |
12132 | 67 |
match event.token() { |
68 |
utils::SERVER => unreachable!(), |
|
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
69 |
Token(tok) => hw_network.client_writable(&poll, tok).unwrap(), |
12132 | 70 |
} |
12130 | 71 |
} |
12858 | 72 |
// if event.kind().is_hup() || event.kind().is_error() { |
73 |
// match event.token() { |
|
74 |
// utils::SERVER => unreachable!(), |
|
75 |
// Token(tok) => server.client_error(&poll, tok).unwrap(), |
|
76 |
// } |
|
77 |
// } |
|
12130 | 78 |
} |
13419 | 79 |
hw_network.on_idle(&poll).unwrap(); |
12130 | 80 |
} |
81 |
} |