yggdrasil/src/main.rs

51 lines
1.6 KiB
Rust

/*
* Yggdrasil: Minecraft authentication server
* Copyright (C) 2023 0xf8.dev@proton.me
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#![feature(fs_try_exists)]
use anyhow::Result;
use ftlog::{debug, error, info, log, trace, warn};
use tokio::spawn;
use crate::config::Config;
use crate::server::start_server;
mod database;
mod server;
mod config;
#[tokio::main]
async fn main() -> Result<()> {
// Build logger
let time_format = time::format_description::parse_owned::<1>("[[[year]-[month]-[day] [hour]:[minute]:[second]]")?;
ftlog::builder()
.time_format(time_format)
.bounded(100_000, false)
.try_init()
.expect("Failed to initialize logger");
// Load config
let config = Config::load()?;
info!("Config location: {}", config.location.display());
// Start server
info!("Starting yggdrasil server!");
let server_thread = spawn(start_server(config.to_owned()));
server_thread.await??;
info!("Server stopped!");
// Cleanup
Ok(ftlog::logger().flush())
}