2022-09-24 16:23:53 +00:00
|
|
|
extern crate flexi_logger;
|
|
|
|
|
|
|
|
mod config;
|
|
|
|
mod server;
|
2022-09-24 18:11:12 +00:00
|
|
|
mod service;
|
2022-09-24 16:23:53 +00:00
|
|
|
|
2022-09-26 07:57:47 +00:00
|
|
|
use flexi_logger::{
|
|
|
|
AdaptiveFormat, Age, Cleanup, Criterion, Duplicate, FileSpec, Logger, LoggerHandle, Naming,
|
|
|
|
};
|
2022-09-24 16:23:53 +00:00
|
|
|
|
2022-09-24 18:11:12 +00:00
|
|
|
use clap::{Parser, Subcommand};
|
|
|
|
|
|
|
|
#[derive(Subcommand, Debug)]
|
|
|
|
enum Command {
|
|
|
|
/// install service
|
|
|
|
Install,
|
|
|
|
/// uninstall service
|
|
|
|
Uninstall,
|
|
|
|
/// start service
|
|
|
|
Start,
|
|
|
|
/// stop service
|
|
|
|
Stop,
|
|
|
|
/// run service (by Windows)
|
|
|
|
Run,
|
2022-09-26 07:43:49 +00:00
|
|
|
/// save default config
|
|
|
|
SaveConfig,
|
2022-09-24 18:11:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// SOCKS5 proxy windows service
|
|
|
|
#[derive(Parser, Debug)]
|
|
|
|
#[clap(author, version, about, long_about = None)]
|
|
|
|
#[clap(propagate_version = true)]
|
|
|
|
struct Cli {
|
|
|
|
#[clap(subcommand)]
|
|
|
|
command: Command,
|
|
|
|
}
|
|
|
|
|
2022-09-26 07:57:47 +00:00
|
|
|
fn create_logger() -> LoggerHandle {
|
|
|
|
Logger::try_with_str("info")
|
|
|
|
.expect("default logging level invalid")
|
2022-09-24 18:11:12 +00:00
|
|
|
.log_to_file(
|
2022-09-26 07:57:47 +00:00
|
|
|
FileSpec::default().directory(
|
|
|
|
std::env::current_exe()
|
|
|
|
.expect("can't get current exe path")
|
|
|
|
.parent()
|
|
|
|
.expect("can't get parent folder"),
|
|
|
|
),
|
2022-09-24 18:11:12 +00:00
|
|
|
)
|
2022-09-24 16:23:53 +00:00
|
|
|
.rotate(
|
|
|
|
Criterion::Age(Age::Day),
|
|
|
|
Naming::Timestamps,
|
|
|
|
Cleanup::KeepLogFiles(4),
|
|
|
|
)
|
2022-09-24 20:35:54 +00:00
|
|
|
.format(flexi_logger::detailed_format)
|
2022-09-28 11:56:22 +00:00
|
|
|
.adaptive_format_for_stdout(AdaptiveFormat::Detailed)
|
2022-09-24 16:23:53 +00:00
|
|
|
.print_message()
|
2022-09-28 11:56:22 +00:00
|
|
|
.duplicate_to_stdout(Duplicate::Info)
|
2022-09-24 20:55:38 +00:00
|
|
|
.write_mode(flexi_logger::WriteMode::Async)
|
2022-09-24 18:11:12 +00:00
|
|
|
.start_with_specfile(
|
|
|
|
std::env::current_exe()
|
|
|
|
.unwrap()
|
|
|
|
.with_file_name("logspec.toml"),
|
|
|
|
)
|
2022-09-26 07:57:47 +00:00
|
|
|
.expect("can't start logger")
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let args = Cli::parse();
|
|
|
|
let logger = create_logger();
|
2022-09-24 16:23:53 +00:00
|
|
|
|
2022-09-24 21:09:38 +00:00
|
|
|
let res = match args.command {
|
|
|
|
Command::Install => service::install(),
|
|
|
|
Command::Uninstall => service::uninstall(),
|
|
|
|
Command::Run => service::run(),
|
|
|
|
Command::Start => service::start(),
|
|
|
|
Command::Stop => service::stop(),
|
2022-09-26 07:43:49 +00:00
|
|
|
Command::SaveConfig => {
|
|
|
|
config::Config::default().save();
|
|
|
|
Ok(())
|
|
|
|
}
|
2022-09-24 21:09:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
if let Err(e) = res {
|
|
|
|
log::error!("{:?} error: {:#?}", args.command, e);
|
2022-09-24 18:11:12 +00:00
|
|
|
}
|
2022-09-24 21:09:38 +00:00
|
|
|
|
|
|
|
drop(logger);
|
2022-09-24 16:23:53 +00:00
|
|
|
}
|