make main window can be reopen if killed by --server for creating ipc
This commit is contained in:
parent
1fcc7001bd
commit
5a740e891e
@ -197,6 +197,7 @@ lazy_static::lazy_static! {
|
|||||||
static ref IS_SERVER: bool = std::env::args().nth(1) == Some("--server".to_owned());
|
static ref IS_SERVER: bool = std::env::args().nth(1) == Some("--server".to_owned());
|
||||||
// Is server logic running. The server code can invoked to run by the main process if --server is not running.
|
// Is server logic running. The server code can invoked to run by the main process if --server is not running.
|
||||||
static ref SERVER_RUNNING: Arc<RwLock<bool>> = Default::default();
|
static ref SERVER_RUNNING: Arc<RwLock<bool>> = Default::default();
|
||||||
|
static ref IS_MAIN: bool = std::env::args().nth(1).map_or(true, |arg| !arg.starts_with("--"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
@ -250,6 +251,11 @@ pub fn is_server() -> bool {
|
|||||||
*IS_SERVER
|
*IS_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn is_main() -> bool {
|
||||||
|
*IS_MAIN
|
||||||
|
}
|
||||||
|
|
||||||
// Is server logic running.
|
// Is server logic running.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_server_running() -> bool {
|
pub fn is_server_running() -> bool {
|
||||||
|
12
src/ipc.rs
12
src/ipc.rs
@ -358,7 +358,15 @@ async fn handle(data: Data, stream: &mut Connection) {
|
|||||||
if is_server() {
|
if is_server() {
|
||||||
let _ = privacy_mode::turn_off_privacy(0, Some(PrivacyModeState::OffByPeer));
|
let _ = privacy_mode::turn_off_privacy(0, Some(PrivacyModeState::OffByPeer));
|
||||||
}
|
}
|
||||||
std::process::exit(-1); // to make sure --server luauchagent process can restart because SuccessfulExit used
|
#[cfg(target_os = "linux")]
|
||||||
|
if crate::is_main() {
|
||||||
|
// below part is for main windows can be reopen during rustdesk installation and installing service from UI
|
||||||
|
// this make new ipc server (domain socket) can be created.
|
||||||
|
std::fs::remove_file(&Config::ipc_path("")).ok();
|
||||||
|
hbb_common::sleep(crate::platform::SERVICE_INTERVAL * 2 as _).await;
|
||||||
|
crate::run_me::<&str>(vec![]).ok();
|
||||||
|
}
|
||||||
|
std::process::exit(-1); // to make sure --server luauchagent process can restart because SuccessfulExit used
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Data::OnlineStatus(_) => {
|
Data::OnlineStatus(_) => {
|
||||||
@ -700,7 +708,7 @@ async fn check_pid(postfix: &str) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if not remove old ipc file, the new ipc creation will fail
|
// if not remove old ipc file, the new ipc creation will fail
|
||||||
// if we remove a ipc file, but the old ipc process is still running,
|
// if we remove a ipc file, but the old ipc process is still running,
|
||||||
// new connection to the ipc will connect to new ipc, old connection to old ipc still keep alive
|
// new connection to the ipc will connect to new ipc, old connection to old ipc still keep alive
|
||||||
std::fs::remove_file(&Config::ipc_path(postfix)).ok();
|
std::fs::remove_file(&Config::ipc_path(postfix)).ok();
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ pub mod linux_desktop_manager;
|
|||||||
use hbb_common::{message_proto::CursorData, ResultType};
|
use hbb_common::{message_proto::CursorData, ResultType};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
#[cfg(not(any(target_os = "macos", target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "macos", target_os = "android", target_os = "ios")))]
|
||||||
const SERVICE_INTERVAL: u64 = 300;
|
pub const SERVICE_INTERVAL: u64 = 300;
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
static ref INSTALLING_SERVICE: Arc<Mutex<bool>>= Default::default();
|
static ref INSTALLING_SERVICE: Arc<Mutex<bool>>= Default::default();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user