author | nemo |
Fri, 12 Apr 2019 11:41:35 -0400 | |
changeset 14797 | 38e66519e585 |
parent 14788 | b3adc030104b |
child 14798 | 9de13d9a6312 |
permissions | -rw-r--r-- |
14797
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
1 |
#![feature(self_struct_ctor)] |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
2 |
#![allow(unused_imports)] |
13426
d1368c776a4f
Enable all lints from the rust-2018-idioms suite.
marmistrz
parents:
13419
diff
changeset
|
3 |
#![deny(bare_trait_objects)] |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
4 |
|
14797
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
5 |
extern crate getopts; |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
6 |
use getopts::Options; |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
7 |
use std::env; |
14462 | 8 |
use log::*; |
12858 | 9 |
use mio::net::*; |
12130 | 10 |
use mio::*; |
11 |
||
14462 | 12 |
mod protocol; |
13 |
mod server; |
|
12130 | 14 |
mod utils; |
15 |
||
13671 | 16 |
use crate::server::network::NetworkLayer; |
13419 | 17 |
use std::time::Duration; |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
18 |
|
12130 | 19 |
fn main() { |
13802 | 20 |
env_logger::init(); |
12142
193dfdcb0620
- Use logging facilities instead of plain println!
unc0rr
parents:
12138
diff
changeset
|
21 |
|
14797
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
22 |
let args: Vec<String> = env::args().collect(); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
23 |
let mut opts = Options::new(); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
24 |
|
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
25 |
opts.optopt("p", "port", "port - defaults to 46631", "PORT"); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
26 |
opts.optflag("h", "help", "help"); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
27 |
let matches = match opts.parse(&args[1..]) { |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
28 |
Ok(m) => { m } |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
29 |
Err(f) => { panic!(f.to_string()) } |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
30 |
}; |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
31 |
if matches.opt_present("h") { |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
32 |
println!("-p/--port - defaults to 46631"); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
33 |
return; |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
34 |
} |
14788 | 35 |
info!("Hedgewars game server, protocol {}", utils::SERVER_VERSION); |
12130 | 36 |
|
14797
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
37 |
let address; |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
38 |
if matches.opt_present("p") { |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
39 |
match matches.opt_str("p") { |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
40 |
Some(x) => address = format!("0.0.0.0:{}", x).parse().unwrap(), |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
41 |
None => address = "0.0.0.0:46631".parse().unwrap(), |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
42 |
} |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
43 |
} |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
44 |
else { |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
45 |
address = "0.0.0.0:46631".parse().unwrap(); |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
46 |
} |
38e66519e585
ugly hacked in argument for port to remove unc0rr's excuse
nemo
parents:
14788
diff
changeset
|
47 |
|
12131 | 48 |
let listener = TcpListener::bind(&address).unwrap(); |
12130 | 49 |
|
50 |
let poll = Poll::new().unwrap(); |
|
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
51 |
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
|
52 |
hw_network.register_server(&poll).unwrap(); |
12130 | 53 |
|
54 |
let mut events = Events::with_capacity(1024); |
|
55 |
||
56 |
loop { |
|
13419 | 57 |
let timeout = if hw_network.has_pending_operations() { |
58 |
Some(Duration::from_millis(1)) |
|
59 |
} else { |
|
60 |
None |
|
61 |
}; |
|
62 |
poll.poll(&mut events, timeout).unwrap(); |
|
12130 | 63 |
|
64 |
for event in events.iter() { |
|
12858 | 65 |
if event.readiness() & Ready::readable() == Ready::readable() { |
12132 | 66 |
match event.token() { |
14784
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14696
diff
changeset
|
67 |
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:
14696
diff
changeset
|
68 |
#[cfg(feature = "official-server")] |
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14696
diff
changeset
|
69 |
utils::IO_TOKEN => hw_network.handle_io_result(), |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
70 |
Token(tok) => hw_network.client_readable(&poll, tok).unwrap(), |
12132 | 71 |
} |
72 |
} |
|
12858 | 73 |
if event.readiness() & Ready::writable() == Ready::writable() { |
12132 | 74 |
match event.token() { |
14784
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14696
diff
changeset
|
75 |
utils::SERVER_TOKEN => unreachable!(), |
f43ab2bd76ae
add a thread for internal server IO and implement account checking with it
alfadur
parents:
14696
diff
changeset
|
76 |
utils::IO_TOKEN => unreachable!(), |
13124
1e39b8749072
separated the server logic from all the async io mess.
alfadur
parents:
12858
diff
changeset
|
77 |
Token(tok) => hw_network.client_writable(&poll, tok).unwrap(), |
12132 | 78 |
} |
12130 | 79 |
} |
14462 | 80 |
// if event.kind().is_hup() || event.kind().is_error() { |
81 |
// match event.token() { |
|
82 |
// utils::SERVER => unreachable!(), |
|
83 |
// Token(tok) => server.client_error(&poll, tok).unwrap(), |
|
84 |
// } |
|
85 |
// } |
|
12130 | 86 |
} |
13419 | 87 |
hw_network.on_idle(&poll).unwrap(); |
12130 | 88 |
} |
89 |
} |