You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.5 KiB

use std::collections::{HashMap, VecDeque};
use log::{debug, info};
use mio::{Events, Poll, PollOpt, Ready, Token};
use crate::client::Client;
use crate::config::Config;
use crate::database::Db;
use crate::game::Game;
use crate::logger;
use crate::result::*;
use crate::server::Server;
use crate::try_log;
impl Game {
pub fn new() -> RudeResult<Self> {
let config = Config::load("config.toml")?;
println!("Loading configuration from config.toml");
let log_level = config.logging.level.clone();
try_print(logger::init(log_level), "Unable to initialize logger")?;
debug!("Initialized logging facility");
debug!("Opening database");
let db = Db::open(&config.database)?;
let events = Events::with_capacity(config.server.event_capacity);
let clients: HashMap<Token, Client> = HashMap::new();
let mut tokens: VecDeque<Token> = VecDeque::with_capacity(config.server.connection_limit);
for i in 1..=config.server.connection_limit {
tokens.push_back(Token(i));
}
let server_address = format!("{}:{}", config.server.ip, config.server.port);
let server = Server::listen(server_address.clone(), Token(0))?;
info!("Listening on {}", &server_address);
let poll = try_log!(Poll::new(), "Unable to create Poll");
try_log!(
poll.register(&server.socket, Token(0), Ready::readable(), PollOpt::edge()),
"Unable to register poll"
);
debug!("Accepting connections");
Ok(Self {
config,
server,
poll,
events,
tokens,
clients,
db,
})
}
}