use socks_hub_core::{BoxError, Config, main_entry};
use std::net::SocketAddr;
#[tokio::main]
async fn main() -> Result<(), BoxError> {
let config = Config::parse_args();
dotenvy::dotenv().ok();
let level = config.verbosity.to_string();
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(level)).init();
log::info!("config: {}", serde_json::to_string_pretty(&config)?);
let cancel_token = tokio_util::sync::CancellationToken::new();
let cancel_token_clone = cancel_token.clone();
let handle = ctrlc2::AsyncCtrlC::new(move || {
cancel_token_clone.cancel();
true
})?;
let mut role = config.listen_proxy_role.clone();
let cb = move |addr: SocketAddr| {
role.addr = addr;
log::info!("Listening on {role}");
};
main_entry(&config, cancel_token, Some(cb)).await?;
handle.await?;
Ok(())
}