From 514d0ea6a83780d5aa43c9ff6a013d79291dd911 Mon Sep 17 00:00:00 2001 From: Serenity Date: Wed, 24 Jul 2024 13:46:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=B9=E4=B8=BA=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 6 +++--- src/core/nal.rs | 18 ++++++++---------- src/core/sangfor.rs | 10 +++------- src/main.rs | 18 +++++++++--------- src/test/nal.rs | 14 ++++++++------ src/util/service.rs | 2 +- 6 files changed, 32 insertions(+), 36 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f6bf488..f07fee3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,14 +18,14 @@ tracing-appender = "0.2" clap = { version = "4.5.4", features = ["derive"] } clap_derive = "4.5.4" -tokio = { version = "1", features = ["full"] } -async-trait = "0.1.77" +#tokio = { version = "1", features = ["full"] } +#async-trait = "0.1.77" time = { version = "0.3.36", features = ["parsing", "macros"] } #rc4 = "0.1.0" service-manager = "0.7" -reqwest = { version = "0.11", features = ["json"] } +reqwest = { version = "0.11", features = ["json", "blocking"] } serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.114" diff --git a/src/core/nal.rs b/src/core/nal.rs index 9202494..fe010d4 100644 --- a/src/core/nal.rs +++ b/src/core/nal.rs @@ -1,16 +1,15 @@ -use async_trait::async_trait; use log::{warn, LevelFilter}; -use reqwest::{Client, Error}; +use reqwest::{Error}; use serde::{Deserialize, Serialize}; use serde_yaml::Serializer; use std::fs::File; use std::time::Duration; +use reqwest::blocking::Client; /// 网络自动登录trait -#[async_trait] pub trait Nal { /// 登录网络 - async fn login_net(&self, config: &LoginConfig) -> Result; + fn login_net(&self, config: &LoginConfig) -> Result; } /// 网络类型 @@ -104,21 +103,20 @@ pub fn init_config() -> NalConfig { /// 获取没有代理的客户端 pub fn get_no_proxy_client() -> Client { Client::builder() - .no_proxy() // 禁用代理 + .no_proxy() .connect_timeout(Duration::from_secs(10)) - .timeout(Duration::from_secs(30)) + .timeout(Duration::from_secs(10)) .build() .unwrap() } /// 检测网络是否正常 -pub async fn check_net() -> bool { +pub fn check_net() -> bool { let mut fail_count = 0; for _ in 0..3 { if !get_no_proxy_client() .get("https://baidu.com") .send() - .await .is_ok() { fail_count += 1; @@ -128,6 +126,6 @@ pub async fn check_net() -> bool { fail_count < 3 } -pub async fn login(nal: &T, lc: &LoginConfig) -> Result { - nal.login_net(lc).await +pub fn login(nal: &T, lc: &LoginConfig) -> Result { + nal.login_net(lc) } diff --git a/src/core/sangfor.rs b/src/core/sangfor.rs index 5291e1a..8ff3854 100644 --- a/src/core/sangfor.rs +++ b/src/core/sangfor.rs @@ -1,6 +1,5 @@ use crate::core::nal::{get_no_proxy_client, LoginConfig, Nal}; use crate::util::rc4::RC4; -use async_trait::async_trait; use log::debug; use reqwest::Error; use std::collections::HashMap; @@ -39,9 +38,8 @@ impl Sangfor { } } -#[async_trait] impl Nal for Sangfor { - async fn login_net(&self, config: &LoginConfig) -> Result { + fn login_net(&self, config: &LoginConfig) -> Result { let client = get_no_proxy_client(); let mut params = HashMap::new(); @@ -61,10 +59,8 @@ impl Nal for Sangfor { let rsp = client .post(lu) .form(¶ms) - .send() - .await? - .json::() - .await?; + .send()? + .json::()?; debug!("login result: {rsp:#?}"); // rsp.is_ok() Ok(rsp["success"] == true) diff --git a/src/main.rs b/src/main.rs index 4cda7e9..764b818 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,14 +5,14 @@ use crate::util::service::Service; use clap::Parser; use log::{debug, error, info, warn, LevelFilter}; use std::str::FromStr; -use tokio::time::{sleep, Duration}; +use std::thread::sleep; +use std::time::Duration; mod core; mod test; mod util; -#[tokio::main] -async fn main() { +fn main() { let config = nal::init_config(); debug!("config: {config:#?}"); let level_filter = @@ -54,26 +54,26 @@ async fn main() { return; } if cli.run { - handler(config).await; + handler(config); return; } //默认直接运行 - handler(config).await + handler(config) } -async fn handler(config: NalConfig) { +fn handler(config: NalConfig) { println!("开始检测。。。"); if !cfg!(debug_assertions) { info!("开始检测。。。"); } loop { //检测网络是否正常 - let is_ok = nal::check_net().await; + let is_ok = nal::check_net(); if !is_ok { warn!("网络异常"); //登录 let sangfor = Sangfor::new("http://1.1.1.4"); - let login_ok = nal::login(&sangfor, &config.login).await; + let login_ok = nal::login(&sangfor, &config.login); if login_ok.unwrap_or_else(|_| false) { info!("登录成功"); } else { @@ -84,6 +84,6 @@ async fn handler(config: NalConfig) { }; // 延迟指定秒后再次执行 - sleep(Duration::from_secs(config.check.interval as u64)).await; + sleep(Duration::from_secs(config.check.interval as u64)); } } diff --git a/src/test/nal.rs b/src/test/nal.rs index 82ab9d8..17b64b6 100644 --- a/src/test/nal.rs +++ b/src/test/nal.rs @@ -1,17 +1,19 @@ -#[tokio::test] -async fn sangfor() { +#[test] +fn sangfor() { let nal: &dyn crate::core::nal::Nal = &crate::core::sangfor::Sangfor::new("http://1.1.1.4/ac_portal/login.php"); let config = crate::core::nal::LoginConfig { username: 2336.to_string(), password: 13141.to_string(), }; - let is_ok = nal.login_net(&config).await; + let is_ok = nal.login_net(&config).unwrap_or_else(|_| false); println!(" is_ok: {:?}", is_ok); + assert_eq!(is_ok, true); } -#[tokio::test] -async fn check_net() { - let is_ok = crate::core::nal::check_net().await; +#[test] +fn check_net() { + let is_ok = crate::core::nal::check_net(); println!(" is_ok: {:?}", is_ok); + assert_eq!(is_ok, true); } diff --git a/src/util/service.rs b/src/util/service.rs index e5215a2..15f618d 100644 --- a/src/util/service.rs +++ b/src/util/service.rs @@ -1,7 +1,7 @@ use std::env; use std::path::PathBuf; use log::{error, info}; -use service_manager::{ScConfig, ScInstallConfig, ScServiceManager, ServiceInstallCtx, ServiceLabel, ServiceManager, ServiceStartCtx, ServiceStopCtx, ServiceUninstallCtx, WindowsErrorSeverity}; +use service_manager::{ServiceInstallCtx, ServiceLabel, ServiceManager, ServiceStartCtx, ServiceStopCtx, ServiceUninstallCtx}; /// 系统服务 pub struct Service {