mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-04-04 06:46:23 +00:00
68 lines
2.1 KiB
Rust
68 lines
2.1 KiB
Rust
#[macro_use] extern crate log;
|
|
#[macro_use] extern crate async_trait;
|
|
#[macro_use] extern crate lazy_static;
|
|
|
|
use tokio::sync::mpsc;
|
|
|
|
mod server;
|
|
mod config;
|
|
mod heartbeat;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
pretty_env_logger::formatted_timed_builder().filter_level(log::LevelFilter::max()).init();
|
|
// pretty_env_logger::formatted_timed_builder().filter_level(log::LevelFilter::Info).init();
|
|
|
|
let mut user_config: config::Config = toml::from_str(
|
|
&std::fs::read_to_string("ServerConfig.toml")
|
|
.map_err(|_| error!("Failed to read config file!"))
|
|
.expect("Failed to read config file!")
|
|
)
|
|
.map_err(|_| error!("Failed to parse config file!"))
|
|
.expect("Failed to parse config file!");
|
|
|
|
// TODO: This should not error lol
|
|
for entry in std::fs::read_dir("Resources/Client").expect("Failed to read Resources/Client!") {
|
|
if let Ok(entry) = entry {
|
|
if entry.path().is_file() {
|
|
if let Ok(metadata) = entry.metadata() {
|
|
if let Some(filename) = entry.path().file_name().map(|s| s.to_string_lossy()) {
|
|
let mut name = filename.to_string();
|
|
if !name.starts_with("/") {
|
|
name = format!("/{name}");
|
|
}
|
|
user_config.mods.push((name, metadata.len() as usize));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
debug!("Mods: {:?}", user_config.mods);
|
|
|
|
let user_config = std::sync::Arc::new(user_config);
|
|
|
|
let (hb_tx, hb_rx) = mpsc::channel(100);
|
|
|
|
tokio::spawn(heartbeat::backend_heartbeat(user_config.clone(), hb_rx));
|
|
|
|
let mut server = server::Server::new(user_config)
|
|
.await
|
|
.map_err(|e| error!("{:?}", e))
|
|
.expect("Failed to start server!");
|
|
|
|
let mut status = server.get_server_status();
|
|
loop {
|
|
if let Err(e) = server.process().await {
|
|
error!("{:?}", e);
|
|
}
|
|
|
|
let new_status = server.get_server_status();
|
|
|
|
if status != new_status {
|
|
status = new_status;
|
|
hb_tx.send(status.clone());
|
|
}
|
|
}
|
|
}
|