use std::{env, sync::Arc}; use tokio::net::TcpListener; use crate::server::handle_connection; mod http; mod script; mod server; #[tokio::main] async fn main() { let config = match script::Config::load() { Ok(config) => Arc::new(config), Err(err) => { eprintln!("failed to load config: {err}"); return } }; let port = env::var("PORT") .unwrap_or_else(|_| String::from("8080")) .parse::() .unwrap_or_else(|_| 8080); let addr = format!("0.0.0.0:{port}"); let Ok(listener) = TcpListener::bind(&addr).await else { println!("failed to bind {addr}"); return }; println!("listening to tcp requests on {addr}"); loop { let Ok((socket, _)) = listener.accept().await else { println!("failed to accept new connection"); continue }; let config = config.clone(); tokio::spawn(async move { handle_connection(socket, config).await; }); } }