From 065af6ed2df6fd7f24b53b801a68f0822ad28ef4 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 29 Sep 2022 10:58:42 +0300 Subject: [PATCH] add cmd serve --- Cargo.lock | 23 +++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 26 +++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 58bc906..45bb942 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -151,6 +151,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "ctrlc" +version = "3.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173" +dependencies = [ + "nix", + "winapi", +] + [[package]] name = "err-derive" version = "0.3.1" @@ -304,6 +314,18 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "nix" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" +dependencies = [ + "autocfg", + "bitflags", + "cfg-if", + "libc", +] + [[package]] name = "num_cpus" version = "1.13.1" @@ -495,6 +517,7 @@ version = "0.1.0" dependencies = [ "async-stream", "clap", + "ctrlc", "fast-socks5", "flexi_logger", "log", diff --git a/Cargo.toml b/Cargo.toml index e2f9d78..dde9859 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" [dependencies] async-stream = "0.3.3" clap = { version = "3.2.22", features = ["derive"] } +ctrlc = "3.2.3" fast-socks5 = "0.8.1" flexi_logger = { version = "0.23.3", features = ["specfile_without_notification", "async"] } log = "0.4.17" diff --git a/src/main.rs b/src/main.rs index fb15e33..ebf8d30 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,13 @@ mod config; mod server; mod service; +use config::Config; use flexi_logger::{ AdaptiveFormat, Age, Cleanup, Criterion, Duplicate, FileSpec, Logger, LoggerHandle, Naming, }; use clap::{Parser, Subcommand}; +use tokio_util::sync::CancellationToken; #[derive(Subcommand, Debug)] enum Command { @@ -24,6 +26,8 @@ enum Command { Run, /// save default config SaveConfig, + /// run server as foreground proccess + Serve, } /// SOCKS5 proxy windows service @@ -64,6 +68,22 @@ fn create_logger() -> LoggerHandle { .expect("can't start logger") } +fn server_foreground() { + let control_token = CancellationToken::new(); + let server_token = control_token.child_token(); + + let res = ctrlc::set_handler(move || { + log::info!("recieved Ctrl-C"); + control_token.cancel(); + }); + + if res.is_ok() { + log::info!("Press Ctrl-C to stop server"); + } + + server::server_executor(Config::get(), server_token).unwrap(); +} + fn main() { let args = Cli::parse(); let logger = create_logger(); @@ -75,7 +95,11 @@ fn main() { Command::Start => service::start(), Command::Stop => service::stop(), Command::SaveConfig => { - config::Config::default().save(); + Config::default().save(); + Ok(()) + } + Command::Serve => { + server_foreground(); Ok(()) } };