gameServer2/src/main.rs
author Wuzzy <Wuzzy2@mail.ru>
Mon, 12 Mar 2018 02:09:21 +0100
changeset 13174 6869d27a2f3f
parent 13124 1e39b8749072
child 13419 28b314ad566d
permissions -rw-r--r--
ACF7: Add one pick hammer in crate Players often reported to screw up with the pick hammer, which is quite annoying. With one pick hammer more, this mission should be slightly less annoying.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
     1
#![allow(unused_imports)]
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
     2
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     3
extern crate rand;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     4
extern crate mio;
12131
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12130
diff changeset
     5
extern crate slab;
12132
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
     6
extern crate netbuf;
12138
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12134
diff changeset
     7
#[macro_use]
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12134
diff changeset
     8
extern crate nom;
12142
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
     9
#[macro_use]
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
    10
extern crate log;
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
    11
extern crate env_logger;
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    12
#[macro_use] extern crate proptest;
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    13
12131
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12130
diff changeset
    14
//use std::io::*;
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    15
//use rand::Rng;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    16
//use std::cmp::Ordering;
12858
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    17
use mio::net::*;
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    18
use mio::*;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    19
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    20
mod utils;
12131
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12130
diff changeset
    21
mod server;
12134
07972a8c2433 - Start protocol parser implementation
unc0rr
parents: 12133
diff changeset
    22
mod protocol;
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    23
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    24
use server::network::NetworkLayer;
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    25
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    26
fn main() {
12142
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
    27
    env_logger::init().unwrap();
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
    28
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12138
diff changeset
    29
    info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION);
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    30
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    31
    let address = "0.0.0.0:46631".parse().unwrap();
12131
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12130
diff changeset
    32
    let listener = TcpListener::bind(&address).unwrap();
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    33
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    34
    let poll = Poll::new().unwrap();
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    35
    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
    36
    hw_network.register_server(&poll).unwrap();
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    37
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    38
    let mut events = Events::with_capacity(1024);
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    39
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    40
    loop {
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    41
        poll.poll(&mut events, None).unwrap();
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    42
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    43
        for event in events.iter() {
12858
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    44
            if event.readiness() & Ready::readable() == Ready::readable() {
12132
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    45
                match event.token() {
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    46
                    utils::SERVER => hw_network.accept_client(&poll).unwrap(),
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    47
                    Token(tok) => hw_network.client_readable(&poll, tok).unwrap(),
12132
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    48
                }
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    49
            }
12858
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    50
            if event.readiness() & Ready::writable() == Ready::writable() {
12132
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    51
                match event.token() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    52
                    utils::SERVER => unreachable!(),
13124
1e39b8749072 separated the server logic from all the async io mess.
alfadur
parents: 12858
diff changeset
    53
                    Token(tok) => hw_network.client_writable(&poll, tok).unwrap(),
12132
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12131
diff changeset
    54
                }
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    55
            }
12858
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    56
//            if event.kind().is_hup() || event.kind().is_error() {
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    57
//                match event.token() {
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    58
//                    utils::SERVER => unreachable!(),
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    59
//                    Token(tok) => server.client_error(&poll, tok).unwrap(),
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    60
//                }
a9d105dc5c95 Improve this code a bit more
unc0rr
parents: 12857
diff changeset
    61
//            }
12130
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    62
        }
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    63
    }
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    64
}