add cmd serve
This commit is contained in:
parent
b10eca9688
commit
065af6ed2d
23
Cargo.lock
generated
23
Cargo.lock
generated
@ -151,6 +151,16 @@ dependencies = [
|
|||||||
"once_cell",
|
"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]]
|
[[package]]
|
||||||
name = "err-derive"
|
name = "err-derive"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@ -304,6 +314,18 @@ dependencies = [
|
|||||||
"windows-sys",
|
"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]]
|
[[package]]
|
||||||
name = "num_cpus"
|
name = "num_cpus"
|
||||||
version = "1.13.1"
|
version = "1.13.1"
|
||||||
@ -495,6 +517,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"async-stream",
|
"async-stream",
|
||||||
"clap",
|
"clap",
|
||||||
|
"ctrlc",
|
||||||
"fast-socks5",
|
"fast-socks5",
|
||||||
"flexi_logger",
|
"flexi_logger",
|
||||||
"log",
|
"log",
|
||||||
|
@ -8,6 +8,7 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
async-stream = "0.3.3"
|
async-stream = "0.3.3"
|
||||||
clap = { version = "3.2.22", features = ["derive"] }
|
clap = { version = "3.2.22", features = ["derive"] }
|
||||||
|
ctrlc = "3.2.3"
|
||||||
fast-socks5 = "0.8.1"
|
fast-socks5 = "0.8.1"
|
||||||
flexi_logger = { version = "0.23.3", features = ["specfile_without_notification", "async"] }
|
flexi_logger = { version = "0.23.3", features = ["specfile_without_notification", "async"] }
|
||||||
log = "0.4.17"
|
log = "0.4.17"
|
||||||
|
26
src/main.rs
26
src/main.rs
@ -4,11 +4,13 @@ mod config;
|
|||||||
mod server;
|
mod server;
|
||||||
mod service;
|
mod service;
|
||||||
|
|
||||||
|
use config::Config;
|
||||||
use flexi_logger::{
|
use flexi_logger::{
|
||||||
AdaptiveFormat, Age, Cleanup, Criterion, Duplicate, FileSpec, Logger, LoggerHandle, Naming,
|
AdaptiveFormat, Age, Cleanup, Criterion, Duplicate, FileSpec, Logger, LoggerHandle, Naming,
|
||||||
};
|
};
|
||||||
|
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
|
use tokio_util::sync::CancellationToken;
|
||||||
|
|
||||||
#[derive(Subcommand, Debug)]
|
#[derive(Subcommand, Debug)]
|
||||||
enum Command {
|
enum Command {
|
||||||
@ -24,6 +26,8 @@ enum Command {
|
|||||||
Run,
|
Run,
|
||||||
/// save default config
|
/// save default config
|
||||||
SaveConfig,
|
SaveConfig,
|
||||||
|
/// run server as foreground proccess
|
||||||
|
Serve,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// SOCKS5 proxy windows service
|
/// SOCKS5 proxy windows service
|
||||||
@ -64,6 +68,22 @@ fn create_logger() -> LoggerHandle {
|
|||||||
.expect("can't start logger")
|
.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() {
|
fn main() {
|
||||||
let args = Cli::parse();
|
let args = Cli::parse();
|
||||||
let logger = create_logger();
|
let logger = create_logger();
|
||||||
@ -75,7 +95,11 @@ fn main() {
|
|||||||
Command::Start => service::start(),
|
Command::Start => service::start(),
|
||||||
Command::Stop => service::stop(),
|
Command::Stop => service::stop(),
|
||||||
Command::SaveConfig => {
|
Command::SaveConfig => {
|
||||||
config::Config::default().save();
|
Config::default().save();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
Command::Serve => {
|
||||||
|
server_foreground();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user