mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2024-11-15 19:22:26 +08:00
perf: change port too slow
Some checks are pending
Alpha Build / alpha (macos-latest, aarch64-apple-darwin) (push) Waiting to run
Alpha Build / alpha (macos-latest, x86_64-apple-darwin) (push) Waiting to run
Alpha Build / alpha (windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha (windows-latest, i686-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha (windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, aarch64-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, armv7-unknown-linux-gnueabihf) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, i686-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (arm64, windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (x64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (x86, windows-latest, i686-pc-windows-msvc) (push) Waiting to run
Alpha Build / Update tag (push) Blocked by required conditions
Some checks are pending
Alpha Build / alpha (macos-latest, aarch64-apple-darwin) (push) Waiting to run
Alpha Build / alpha (macos-latest, x86_64-apple-darwin) (push) Waiting to run
Alpha Build / alpha (windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha (windows-latest, i686-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha (windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, aarch64-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, armv7-unknown-linux-gnueabihf) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, i686-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-linux (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (arm64, windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (x64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Alpha Build / alpha-for-fixed-webview2 (x86, windows-latest, i686-pc-windows-msvc) (push) Waiting to run
Alpha Build / Update tag (push) Blocked by required conditions
This commit is contained in:
parent
1bd51be99c
commit
359d9285fe
|
@ -7,7 +7,7 @@ use once_cell::sync::OnceCell;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use serde_yaml::Mapping;
|
use serde_yaml::Mapping;
|
||||||
use std::{sync::Arc, time::Duration};
|
use std::{sync::Arc, time::Duration};
|
||||||
use sysinfo::System;
|
use sysinfo::{ProcessRefreshKind, RefreshKind, System};
|
||||||
use tauri::api::process::{Command, CommandChild, CommandEvent};
|
use tauri::api::process::{Command, CommandChild, CommandEvent};
|
||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
|
|
||||||
|
@ -70,12 +70,6 @@ impl CoreManager {
|
||||||
pub async fn run_core(&self) -> Result<()> {
|
pub async fn run_core(&self) -> Result<()> {
|
||||||
let config_path = Config::generate_file(ConfigType::Run)?;
|
let config_path = Config::generate_file(ConfigType::Run)?;
|
||||||
|
|
||||||
#[allow(unused_mut)]
|
|
||||||
let mut should_kill = match self.sidecar.lock().take() {
|
|
||||||
Some(_) => true,
|
|
||||||
None => false,
|
|
||||||
};
|
|
||||||
|
|
||||||
// 关闭tun模式
|
// 关闭tun模式
|
||||||
let mut disable = Mapping::new();
|
let mut disable = Mapping::new();
|
||||||
let mut tun = Mapping::new();
|
let mut tun = Mapping::new();
|
||||||
|
@ -84,23 +78,19 @@ impl CoreManager {
|
||||||
log::debug!(target: "app", "disable tun mode");
|
log::debug!(target: "app", "disable tun mode");
|
||||||
let _ = clash_api::patch_configs(&disable).await;
|
let _ = clash_api::patch_configs(&disable).await;
|
||||||
|
|
||||||
let mut system = System::new();
|
|
||||||
system.refresh_all();
|
|
||||||
let procs = system.processes_by_name("verge-mihomo");
|
|
||||||
for proc in procs {
|
|
||||||
log::debug!(target: "app", "kill all clash process");
|
|
||||||
proc.kill();
|
|
||||||
}
|
|
||||||
|
|
||||||
if *self.use_service_mode.lock() {
|
if *self.use_service_mode.lock() {
|
||||||
log::debug!(target: "app", "stop the core by service");
|
log::debug!(target: "app", "stop the core by service");
|
||||||
log_err!(service::stop_core_by_service().await);
|
log_err!(service::stop_core_by_service().await);
|
||||||
should_kill = true;
|
} else {
|
||||||
}
|
let mut system = System::new_with_specifics(
|
||||||
|
RefreshKind::new().with_processes(ProcessRefreshKind::everything()),
|
||||||
|
);
|
||||||
|
let procs = system.processes_by_name("verge-mihomo");
|
||||||
|
|
||||||
// 这里得等一会儿
|
for proc in procs {
|
||||||
if should_kill {
|
log::debug!(target: "app", "kill all clash process");
|
||||||
sleep(Duration::from_millis(500)).await;
|
proc.kill();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 服务模式
|
// 服务模式
|
||||||
|
@ -237,8 +227,9 @@ impl CoreManager {
|
||||||
let mut sidecar = self.sidecar.lock();
|
let mut sidecar = self.sidecar.lock();
|
||||||
let _ = sidecar.take();
|
let _ = sidecar.take();
|
||||||
|
|
||||||
let mut system = System::new();
|
let mut system = System::new_with_specifics(
|
||||||
system.refresh_all();
|
RefreshKind::new().with_processes(ProcessRefreshKind::everything()),
|
||||||
|
);
|
||||||
let procs = system.processes_by_name("verge-mihomo");
|
let procs = system.processes_by_name("verge-mihomo");
|
||||||
for proc in procs {
|
for proc in procs {
|
||||||
log::debug!(target: "app", "kill all clash process");
|
log::debug!(target: "app", "kill all clash process");
|
||||||
|
|
|
@ -107,48 +107,13 @@ pub async fn patch_clash(patch: Mapping) -> Result<()> {
|
||||||
Config::clash().draft().patch_config(patch.clone());
|
Config::clash().draft().patch_config(patch.clone());
|
||||||
|
|
||||||
let res = {
|
let res = {
|
||||||
let redir_port = patch.get("redir-port");
|
|
||||||
let tproxy_port = patch.get("tproxy-port");
|
|
||||||
let mixed_port = patch.get("mixed-port");
|
|
||||||
let socks_port = patch.get("socks-port");
|
|
||||||
let port = patch.get("port");
|
|
||||||
let enable_random_port = Config::verge().latest().enable_random_port.unwrap_or(false);
|
|
||||||
if mixed_port.is_some() && !enable_random_port {
|
|
||||||
let changed = mixed_port.unwrap()
|
|
||||||
!= Config::verge()
|
|
||||||
.latest()
|
|
||||||
.verge_mixed_port
|
|
||||||
.unwrap_or(Config::clash().data().get_mixed_port());
|
|
||||||
// 检查端口占用
|
|
||||||
if changed {
|
|
||||||
if let Some(port) = mixed_port.unwrap().as_u64() {
|
|
||||||
if !port_scanner::local_port_available(port as u16) {
|
|
||||||
Config::clash().discard();
|
|
||||||
bail!("port already in use");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 激活订阅
|
// 激活订阅
|
||||||
if redir_port.is_some()
|
if patch.get("secret").is_some() || patch.get("external-controller").is_some() {
|
||||||
|| tproxy_port.is_some()
|
|
||||||
|| mixed_port.is_some()
|
|
||||||
|| socks_port.is_some()
|
|
||||||
|| port.is_some()
|
|
||||||
|| patch.get("secret").is_some()
|
|
||||||
|| patch.get("external-controller").is_some()
|
|
||||||
{
|
|
||||||
Config::generate().await?;
|
Config::generate().await?;
|
||||||
CoreManager::global().run_core().await?;
|
CoreManager::global().run_core().await?;
|
||||||
handle::Handle::refresh_clash();
|
handle::Handle::refresh_clash();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新系统代理
|
|
||||||
if mixed_port.is_some() {
|
|
||||||
log_err!(sysopt::Sysopt::global().init_sysproxy());
|
|
||||||
}
|
|
||||||
|
|
||||||
if patch.get("mode").is_some() {
|
if patch.get("mode").is_some() {
|
||||||
log_err!(handle::Handle::update_systray_part());
|
log_err!(handle::Handle::update_systray_part());
|
||||||
}
|
}
|
||||||
|
@ -174,7 +139,6 @@ pub async fn patch_clash(patch: Mapping) -> Result<()> {
|
||||||
/// 一般都是一个个的修改
|
/// 一般都是一个个的修改
|
||||||
pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
||||||
Config::verge().draft().patch_config(patch.clone());
|
Config::verge().draft().patch_config(patch.clone());
|
||||||
|
|
||||||
let tun_mode = patch.enable_tun_mode;
|
let tun_mode = patch.enable_tun_mode;
|
||||||
let auto_launch = patch.enable_auto_launch;
|
let auto_launch = patch.enable_auto_launch;
|
||||||
let system_proxy = patch.enable_system_proxy;
|
let system_proxy = patch.enable_system_proxy;
|
||||||
|
@ -182,7 +146,7 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
||||||
let pac_content = patch.pac_file_content;
|
let pac_content = patch.pac_file_content;
|
||||||
let proxy_bypass = patch.system_proxy_bypass;
|
let proxy_bypass = patch.system_proxy_bypass;
|
||||||
let language = patch.language;
|
let language = patch.language;
|
||||||
let port = patch.verge_mixed_port;
|
let mixed_port = patch.verge_mixed_port;
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
let tray_icon = patch.tray_icon;
|
let tray_icon = patch.tray_icon;
|
||||||
let common_tray_icon = patch.common_tray_icon;
|
let common_tray_icon = patch.common_tray_icon;
|
||||||
|
@ -190,41 +154,62 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
||||||
let tun_tray_icon = patch.tun_tray_icon;
|
let tun_tray_icon = patch.tun_tray_icon;
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
let redir_enabled = patch.verge_redir_enabled;
|
let redir_enabled = patch.verge_redir_enabled;
|
||||||
|
#[cfg(not(target_os = "windows"))]
|
||||||
|
let redir_port = patch.verge_redir_port;
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
let tproxy_enabled = patch.verge_tproxy_enabled;
|
let tproxy_enabled = patch.verge_tproxy_enabled;
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
let tproxy_port = patch.verge_tproxy_port;
|
||||||
let socks_enabled = patch.verge_socks_enabled;
|
let socks_enabled = patch.verge_socks_enabled;
|
||||||
|
let socks_port = patch.verge_socks_port;
|
||||||
let http_enabled = patch.verge_http_enabled;
|
let http_enabled = patch.verge_http_enabled;
|
||||||
|
let http_port = patch.verge_port;
|
||||||
let res = {
|
let res = {
|
||||||
let service_mode = patch.enable_service_mode;
|
let service_mode = patch.enable_service_mode;
|
||||||
|
let mut generated = false;
|
||||||
if service_mode.is_some() {
|
if service_mode.is_some() {
|
||||||
log::debug!(target: "app", "change service mode to {}", service_mode.unwrap());
|
log::debug!(target: "app", "change service mode to {}", service_mode.unwrap());
|
||||||
|
if !generated {
|
||||||
Config::generate().await?;
|
Config::generate().await?;
|
||||||
CoreManager::global().run_core().await?;
|
CoreManager::global().run_core().await?;
|
||||||
|
generated = true;
|
||||||
|
}
|
||||||
} else if tun_mode.is_some() {
|
} else if tun_mode.is_some() {
|
||||||
update_core_config().await?;
|
update_core_config().await?;
|
||||||
}
|
}
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
if redir_enabled.is_some() {
|
if redir_enabled.is_some() || redir_port.is_some() {
|
||||||
Config::generate().await?;
|
if !generated {
|
||||||
CoreManager::global().run_core().await?;
|
Config::generate().await?;
|
||||||
|
CoreManager::global().run_core().await?;
|
||||||
|
generated = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
if tproxy_enabled.is_some() {
|
if tproxy_enabled.is_some() || tproxy_port.is_some() {
|
||||||
Config::generate().await?;
|
if !generated {
|
||||||
CoreManager::global().run_core().await?;
|
Config::generate().await?;
|
||||||
|
CoreManager::global().run_core().await?;
|
||||||
|
generated = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if socks_enabled.is_some() || http_enabled.is_some() {
|
if socks_enabled.is_some()
|
||||||
Config::generate().await?;
|
|| http_enabled.is_some()
|
||||||
CoreManager::global().run_core().await?;
|
|| socks_port.is_some()
|
||||||
|
|| http_port.is_some()
|
||||||
|
|| mixed_port.is_some()
|
||||||
|
{
|
||||||
|
if !generated {
|
||||||
|
Config::generate().await?;
|
||||||
|
CoreManager::global().run_core().await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if auto_launch.is_some() {
|
if auto_launch.is_some() {
|
||||||
sysopt::Sysopt::global().update_launch()?;
|
sysopt::Sysopt::global().update_launch()?;
|
||||||
}
|
}
|
||||||
if system_proxy.is_some()
|
if system_proxy.is_some()
|
||||||
|| proxy_bypass.is_some()
|
|| proxy_bypass.is_some()
|
||||||
|| port.is_some()
|
|| mixed_port.is_some()
|
||||||
|| pac.is_some()
|
|| pac.is_some()
|
||||||
|| pac_content.is_some()
|
|| pac_content.is_some()
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,6 @@ export const ClashPortViewer = forwardRef<DialogRef>((props, ref) => {
|
||||||
|
|
||||||
const { clashInfo, patchInfo } = useClashInfo();
|
const { clashInfo, patchInfo } = useClashInfo();
|
||||||
const { verge, patchVerge } = useVerge();
|
const { verge, patchVerge } = useVerge();
|
||||||
|
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const [redirPort, setRedirPort] = useState(
|
const [redirPort, setRedirPort] = useState(
|
||||||
verge?.verge_redir_port ?? clashInfo?.redir_port ?? 7895
|
verge?.verge_redir_port ?? clashInfo?.redir_port ?? 7895
|
||||||
|
@ -94,24 +93,57 @@ export const ClashPortViewer = forwardRef<DialogRef>((props, ref) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (OS !== "windows") {
|
if (OS === "windows") {
|
||||||
await patchInfo({ "redir-port": redirPort });
|
await patchInfo({
|
||||||
await patchVerge({ verge_redir_port: redirPort });
|
"mixed-port": mixedPort,
|
||||||
await patchVerge({ verge_redir_enabled: redirEnabled });
|
"socks-port": socksPort,
|
||||||
|
port,
|
||||||
|
});
|
||||||
|
await patchVerge({
|
||||||
|
verge_mixed_port: mixedPort,
|
||||||
|
verge_socks_port: socksPort,
|
||||||
|
verge_socks_enabled: socksEnabled,
|
||||||
|
verge_port: port,
|
||||||
|
verge_http_enabled: httpEnabled,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (OS === "macos") {
|
||||||
|
await patchInfo({
|
||||||
|
"redir-port": redirPort,
|
||||||
|
"mixed-port": mixedPort,
|
||||||
|
"socks-port": socksPort,
|
||||||
|
port,
|
||||||
|
});
|
||||||
|
await patchVerge({
|
||||||
|
verge_redir_port: redirPort,
|
||||||
|
verge_redir_enabled: redirEnabled,
|
||||||
|
verge_mixed_port: mixedPort,
|
||||||
|
verge_socks_port: socksPort,
|
||||||
|
verge_socks_enabled: socksEnabled,
|
||||||
|
verge_port: port,
|
||||||
|
verge_http_enabled: httpEnabled,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (OS === "linux") {
|
if (OS === "linux") {
|
||||||
await patchInfo({ "tproxy-port": tproxyPort });
|
await patchInfo({
|
||||||
await patchVerge({ verge_tproxy_port: tproxyPort });
|
"redir-port": redirPort,
|
||||||
await patchVerge({ verge_tproxy_enabled: tproxyEnabled });
|
"tproxy-port": tproxyPort,
|
||||||
|
"mixed-port": mixedPort,
|
||||||
|
"socks-port": socksPort,
|
||||||
|
port,
|
||||||
|
});
|
||||||
|
await patchVerge({
|
||||||
|
verge_redir_port: redirPort,
|
||||||
|
verge_redir_enabled: redirEnabled,
|
||||||
|
verge_tproxy_port: tproxyPort,
|
||||||
|
verge_tproxy_enabled: tproxyEnabled,
|
||||||
|
verge_mixed_port: mixedPort,
|
||||||
|
verge_socks_port: socksPort,
|
||||||
|
verge_socks_enabled: socksEnabled,
|
||||||
|
verge_port: port,
|
||||||
|
verge_http_enabled: httpEnabled,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
await patchInfo({ "mixed-port": mixedPort });
|
|
||||||
await patchInfo({ "socks-port": socksPort });
|
|
||||||
await patchInfo({ port });
|
|
||||||
await patchVerge({ verge_mixed_port: mixedPort });
|
|
||||||
await patchVerge({ verge_socks_port: socksPort });
|
|
||||||
await patchVerge({ verge_port: port });
|
|
||||||
await patchVerge({ verge_socks_enabled: socksEnabled });
|
|
||||||
await patchVerge({ verge_http_enabled: httpEnabled });
|
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
Notice.success(t("Clash Port Modified"), 1000);
|
Notice.success(t("Clash Port Modified"), 1000);
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user