Files
clash-proxy/src-tauri/src/utils/server.rs

45 lines
1.2 KiB
Rust
Raw Normal View History

extern crate warp;
use super::resolve;
2022-10-28 01:02:47 +08:00
use crate::data::Verge;
use port_scanner::local_port_available;
use tauri::AppHandle;
use warp::Filter;
2022-03-18 10:59:35 +08:00
#[cfg(not(feature = "verge-dev"))]
const SERVER_PORT: u16 = 33331;
2022-03-18 10:59:35 +08:00
#[cfg(feature = "verge-dev")]
const SERVER_PORT: u16 = 11233;
/// check whether there is already exists
2022-10-28 01:02:47 +08:00
pub fn check_singleton() -> Result<(), ()> {
let verge = Verge::new();
let port = verge.app_singleton_port.unwrap_or(SERVER_PORT);
if !local_port_available(port) {
tauri::async_runtime::block_on(async {
let url = format!("http://127.0.0.1:{}/commands/visible", port);
reqwest::get(url).await.unwrap();
Err(())
})
} else {
Ok(())
}
}
/// The embed server only be used to implement singleton process
/// maybe it can be used as pac server later
pub fn embed_server(app_handle: &AppHandle, port: Option<u16>) {
let app_handle = app_handle.clone();
let port = port.unwrap_or(SERVER_PORT);
tauri::async_runtime::spawn(async move {
2021-12-29 18:49:38 +08:00
let commands = warp::path!("commands" / "visible").map(move || {
resolve::create_window(&app_handle);
2021-12-29 18:49:38 +08:00
return format!("ok");
});
warp::serve(commands).bind(([127, 0, 0, 1], port)).await;
});
}