gameServer2/src/main.rs
author Wuzzy <Wuzzy2@mail.ru>
Wed, 25 Oct 2017 23:09:41 +0200
changeset 12763 ad67a3804981
parent 12137 193dfdcb0620
child 12852 bd35cb2302b3
permissions -rw-r--r--
Fix sometimes ammo schemes not being saved after changing before an ammo scheme got deleted in session This was because the bool isDeleting is not initialized, so its initial value is unpredictable. Which means there's chance it starts with true, confusing the frontend.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     1
extern crate rand;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
     2
extern crate mio;
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
     3
extern crate slab;
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
     4
extern crate netbuf;
12133
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12129
diff changeset
     5
#[macro_use]
81df2e1f9ae9 Some parsing using nom
unc0rr
parents: 12129
diff changeset
     6
extern crate nom;
12137
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
     7
#[macro_use]
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
     8
extern crate log;
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
     9
extern crate env_logger;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    10
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    11
//use std::io::*;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    12
//use rand::Rng;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    13
//use std::cmp::Ordering;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    14
use mio::tcp::*;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    15
use mio::*;
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    16
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    17
mod utils;
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    18
mod server;
12129
07972a8c2433 - Start protocol parser implementation
unc0rr
parents: 12128
diff changeset
    19
mod protocol;
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    20
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    21
fn main() {
12137
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    22
    env_logger::init().unwrap();
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    23
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    24
    info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION);
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    25
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    26
    let address = "0.0.0.0:46631".parse().unwrap();
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    27
    let listener = TcpListener::bind(&address).unwrap();
12128
f50876f3eff8 Refactor modules layout
unc0rr
parents: 12127
diff changeset
    28
    let mut server = server::server::HWServer::new(listener, 1024, 512);
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    29
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    30
    let poll = Poll::new().unwrap();
12126
4348997e502b Refactor code to add more structure to it
unc0rr
parents: 12125
diff changeset
    31
    server.register(&poll).unwrap();
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    32
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    33
    let mut events = Events::with_capacity(1024);
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    34
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    35
    loop {
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    36
        poll.poll(&mut events, None).unwrap();
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    37
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    38
        for event in events.iter() {
12127
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    39
            if event.kind().is_readable() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    40
                match event.token() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    41
                    utils::SERVER => server.accept(&poll).unwrap(),
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    42
                    tok => server.client_readable(&poll, tok).unwrap(),
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    43
                }
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    44
            }
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    45
            if event.kind().is_writable() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    46
                match event.token() {
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    47
                    utils::SERVER => unreachable!(),
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    48
                    tok => server.client_writable(&poll, tok).unwrap(),
36ac9c075d0d - Use netbuf buffers for client connection stream
unc0rr
parents: 12126
diff changeset
    49
                }
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    50
            }
12137
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    51
            if event.kind().is_hup() || event.kind().is_error() {
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    52
                match event.token() {
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    53
                    utils::SERVER => unreachable!(),
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    54
                    tok => server.client_error(&poll, tok).unwrap(),
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    55
                }
193dfdcb0620 - Use logging facilities instead of plain println!
unc0rr
parents: 12133
diff changeset
    56
            }
12125
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    57
        }
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    58
    }
858bf4d04c54 Start server implementation in rust
unc0rr
parents:
diff changeset
    59
}