From b79ba14215995d3d4af946b52ff648042281e0aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sun, 20 Jul 2025 12:11:08 +0000 Subject: [PATCH] Upload files to "futriix-server/src" --- futriix-server/src/main.rs | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 futriix-server/src/main.rs diff --git a/futriix-server/src/main.rs b/futriix-server/src/main.rs new file mode 100644 index 0000000..fc79d82 --- /dev/null +++ b/futriix-server/src/main.rs @@ -0,0 +1,77 @@ +// futriix-server/main.rs +mod server; + +use server::*; +use std::fs; +use std::path::Path; +use toml::Value; +use simplelog::*; +use chrono::Local; +use log::info; +use ctrlc; +use colored::Colorize; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let config_content = fs::read_to_string("futriix.config.toml")?; + let config: Value = toml::from_str(&config_content)?; + + let ip = config["server"]["ip"].as_str().unwrap_or("127.0.0.1"); + let port = config["server"]["port"].as_integer().unwrap_or(8080) as u16; + let log_path = config["server"]["log_path"].as_str().unwrap_or("futriix.log"); + + ctrlc::set_handler(move || { + println!("{}", "Server is now shutdown".truecolor(0, 191, 255)); + std::process::exit(0); + })?; + + let log_dir = Path::new("logs"); + if !log_dir.exists() { + fs::create_dir(log_dir)?; + } + + let timestamp = Local::now().format("%d.%m.%Y %H-%M-%S"); + let log_filename = format!("futriix_{}.log", timestamp); + let full_log_path = log_dir.join(log_filename); + + let symlink_path = Path::new(log_path); + if symlink_path.exists() { + fs::remove_file(symlink_path)?; + } + #[cfg(unix)] + std::os::unix::fs::symlink(full_log_path.clone(), symlink_path)?; + #[cfg(windows)] + std::os::windows::fs::symlink_file(full_log_path.clone(), symlink_path)?; + + let log_file = fs::OpenOptions::new() + .create(true) + .append(true) + .open(&full_log_path)?; + + CombinedLogger::init(vec![ + TermLogger::new( + LevelFilter::Info, + Config::default(), + TerminalMode::Mixed, + ColorChoice::Auto, + ), + WriteLogger::new( + LevelFilter::Info, + Config::default(), + log_file, + ), + ])?; + + println!(); + println!("{}", "Futriix Server started successfully!".truecolor(0, 191, 255)); + + let server = FutriixServer::new(&config); + let addr = format!("{}:{}", ip, port); + info!("Starting server on {}", addr); + info!("Log file: {}", full_log_path.display()); + info!("Symlink: {}", symlink_path.display()); + + server.run(&addr).await?; + + Ok(()) +}