mirror of https://github.com/rapiz1/rathole.git
46 lines
1.3 KiB
Rust
46 lines
1.3 KiB
Rust
use anyhow::Result;
|
|
use clap::Parser;
|
|
use rathole::{run, Cli};
|
|
use tokio::{signal, sync::broadcast};
|
|
use tracing_subscriber::EnvFilter;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
let args = Cli::parse();
|
|
|
|
let (shutdown_tx, shutdown_rx) = broadcast::channel::<bool>(1);
|
|
tokio::spawn(async move {
|
|
if let Err(e) = signal::ctrl_c().await {
|
|
// Something really weird happened. So just panic
|
|
panic!("Failed to listen for the ctrl-c signal: {:?}", e);
|
|
}
|
|
|
|
if let Err(e) = shutdown_tx.send(true) {
|
|
// shutdown signal must be catched and handle properly
|
|
// `rx` must not be dropped
|
|
panic!("Failed to send shutdown signal: {:?}", e);
|
|
}
|
|
});
|
|
|
|
#[cfg(feature = "console")]
|
|
{
|
|
console_subscriber::init();
|
|
|
|
tracing::info!("console_subscriber enabled");
|
|
}
|
|
#[cfg(not(feature = "console"))]
|
|
{
|
|
let is_atty = atty::is(atty::Stream::Stdout);
|
|
|
|
let level = "info"; // if RUST_LOG not present, use `info` level
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(
|
|
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::from(level)),
|
|
)
|
|
.with_ansi(is_atty)
|
|
.init();
|
|
}
|
|
|
|
run(args, shutdown_rx).await
|
|
}
|