gameServer2/src/main.rs
author Wuzzy <Wuzzy2@mail.ru>
Mon, 17 Sep 2018 22:37:47 +0200
changeset 13819 4ed202f0428e
parent 13666 09f4a30e50cc
child 13713 59ea2403f62d
permissions -rw-r--r--
Easier back jumps in Basic Movement Training (fixes bug #692) The explanation of Back Jumping (2/2) has been simplified and the "hard" part has been made easier by lowering the girders. The original idea was that I wanted to force players to learn how to jump higher by delaying the 2nd backspace keypress. But this turned out that this section was too unfair and we have lost at least one player due to rage-quitting, according to feedback.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)]
13666
09f4a30e50cc Rust 2018 conversion
alfadur
parents: 13529
diff changeset
     3
#![feature(rust_2018_preview)]
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
     4
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     5
extern crate rand;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     6
extern crate mio;
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
     7
extern crate slab;
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
     8
extern crate netbuf;
13423
87a6cad20c90 Implement game start & engine messages
alfadur
parents: 13421
diff changeset
     9
extern crate base64;
12133
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12129
diff changeset
    10
#[macro_use]
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12129
diff changeset
    11
extern crate nom;
12137
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    12
#[macro_use]
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    13
extern crate log;
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    14
extern crate env_logger;
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    15
#[macro_use] extern crate proptest;
13493
282e5e54386f Something down in the food chain already uses bitflags, so might as well switch to them
alfadur
parents: 13430
diff changeset
    16
#[macro_use] extern crate bitflags;
13529
662f7df89d06 Implement room config export
alfadur
parents: 13493
diff changeset
    17
extern crate serde;
662f7df89d06 Implement room config export
alfadur
parents: 13493
diff changeset
    18
extern crate serde_yaml;
662f7df89d06 Implement room config export
alfadur
parents: 13493
diff changeset
    19
#[macro_use] extern crate serde_derive;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    20
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    21
//use std::io::*;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    22
//use rand::Rng;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    23
//use std::cmp::Ordering;
12853
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    24
use mio::net::*;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    25
use mio::*;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    26
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    27
mod utils;
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    28
mod server;
12129
07972a8c2433 - Start protocol parser implementation
unc0rr
parents: 12128
diff changeset
    29
mod protocol;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    30
13666
09f4a30e50cc Rust 2018 conversion
alfadur
parents: 13529
diff changeset
    31
use crate::server::network::NetworkLayer;
13414
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    32
use std::time::Duration;
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    33
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    34
fn main() {
12137
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    35
    env_logger::init().unwrap();
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    36
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    37
    info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION);
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    38
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    39
    let address = "0.0.0.0:46631".parse().unwrap();
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    40
    let listener = TcpListener::bind(&address).unwrap();
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    41
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    42
    let poll = Poll::new().unwrap();
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    43
    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
    44
    hw_network.register_server(&poll).unwrap();
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    45
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    46
    let mut events = Events::with_capacity(1024);
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    47
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    48
    loop {
13414
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    49
        let timeout = if hw_network.has_pending_operations() {
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    50
            Some(Duration::from_millis(1))
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    51
        } else {
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    52
            None
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    53
        };
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    54
        poll.poll(&mut events, timeout).unwrap();
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    55
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    56
        for event in events.iter() {
12853
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    57
            if event.readiness() & Ready::readable() == Ready::readable() {
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    58
                match event.token() {
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    59
                    utils::SERVER => hw_network.accept_client(&poll).unwrap(),
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    60
                    Token(tok) => hw_network.client_readable(&poll, tok).unwrap(),
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    61
                }
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    62
            }
12853
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    63
            if event.readiness() & Ready::writable() == Ready::writable() {
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    64
                match event.token() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    65
                    utils::SERVER => unreachable!(),
13119
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12853
diff changeset
    66
                    Token(tok) => hw_network.client_writable(&poll, tok).unwrap(),
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    67
                }
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    68
            }
12853
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    69
//            if event.kind().is_hup() || event.kind().is_error() {
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    70
//                match event.token() {
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    71
//                    utils::SERVER => unreachable!(),
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    72
//                    Token(tok) => server.client_error(&poll, tok).unwrap(),
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    73
//                }
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12852
diff changeset
    74
//            }
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    75
        }
13414
28b314ad566d handle edge polling properly
alfadur
parents: 13119
diff changeset
    76
        hw_network.on_idle(&poll).unwrap();
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    77
    }
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    78
}