use log::info;
use servers::*;
use state::GlobalState;
use tokio::signal;
use utils::logging;
use crate::config::load_config;
mod config;
mod servers;
mod services;
mod state;
mod utils;
fn main() {
let runtime = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.expect("Failed building the tokio Runtime");
let config = runtime.block_on(load_config()).unwrap_or_default();
logging::setup(config.logging);
info!("Starting Pocket Relay v{}", state::VERSION);
runtime.block_on(GlobalState::init(config));
runtime.block_on(logging::log_connection_urls());
runtime.spawn(redirector::start_server());
runtime.spawn(qos::start_server());
runtime.spawn(http::start_server());
runtime.spawn(main::start_server());
runtime.spawn(telemetry::start_server());
runtime.block_on(signal::ctrl_c()).ok();
info!("Shutting down...");
}