mirror of
https://github.com/rustdesk/rustdesk-server.git
synced 2025-07-01 23:35:38 +00:00
Merge pull request #86 from dlhxzb/listern-for-unix-signal
Feat: listen for unix signal
This commit is contained in:
commit
d7b2060a5b
@ -5,10 +5,7 @@ fn main() {
|
|||||||
.out_dir("src/protos")
|
.out_dir("src/protos")
|
||||||
.inputs(&["protos/rendezvous.proto", "protos/message.proto"])
|
.inputs(&["protos/rendezvous.proto", "protos/message.proto"])
|
||||||
.include("protos")
|
.include("protos")
|
||||||
.customize(
|
.customize(protobuf_codegen::Customize::default().tokio_bytes(true))
|
||||||
protobuf_codegen::Customize::default()
|
|
||||||
.tokio_bytes(true)
|
|
||||||
)
|
|
||||||
.run()
|
.run()
|
||||||
.expect("Codegen failed.");
|
.expect("Codegen failed.");
|
||||||
}
|
}
|
||||||
|
@ -847,4 +847,4 @@ pub fn is_write_need_confirmation(
|
|||||||
} else {
|
} else {
|
||||||
Ok(DigestCheckResult::NoSuchFile)
|
Ok(DigestCheckResult::NoSuchFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,8 @@
|
|||||||
use clap::App;
|
use clap::App;
|
||||||
use hbb_common::{anyhow::Context, log, ResultType};
|
use hbb_common::{
|
||||||
|
anyhow::{Context, Result},
|
||||||
|
log, ResultType,
|
||||||
|
};
|
||||||
use ini::Ini;
|
use ini::Ini;
|
||||||
use sodiumoxide::crypto::sign;
|
use sodiumoxide::crypto::sign;
|
||||||
use std::{
|
use std::{
|
||||||
@ -138,3 +141,43 @@ pub fn gen_sk(wait: u64) -> (String, Option<sign::SecretKey>) {
|
|||||||
}
|
}
|
||||||
("".to_owned(), None)
|
("".to_owned(), None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(unix)]
|
||||||
|
pub async fn listen_signal() -> Result<()> {
|
||||||
|
use hbb_common::tokio;
|
||||||
|
use hbb_common::tokio::signal::unix::{signal, SignalKind};
|
||||||
|
|
||||||
|
tokio::spawn(async {
|
||||||
|
let mut s = signal(SignalKind::hangup())?;
|
||||||
|
let hangup = s.recv();
|
||||||
|
let mut s = signal(SignalKind::terminate())?;
|
||||||
|
let terminate = s.recv();
|
||||||
|
let mut s = signal(SignalKind::interrupt())?;
|
||||||
|
let interrupt = s.recv();
|
||||||
|
let mut s = signal(SignalKind::quit())?;
|
||||||
|
let quit = s.recv();
|
||||||
|
|
||||||
|
tokio::select! {
|
||||||
|
_ = hangup => {
|
||||||
|
log::info!("signal hangup");
|
||||||
|
}
|
||||||
|
_ = terminate => {
|
||||||
|
log::info!("signal terminate");
|
||||||
|
}
|
||||||
|
_ = interrupt => {
|
||||||
|
log::info!("signal interrupt");
|
||||||
|
}
|
||||||
|
_ = quit => {
|
||||||
|
log::info!("signal quit");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
|
.await?
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(unix))]
|
||||||
|
pub async fn listen_signal() -> Result<()> {
|
||||||
|
let () = std::future::pending().await;
|
||||||
|
unreachable!();
|
||||||
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
use crate::common::*;
|
use crate::common::*;
|
||||||
use crate::database;
|
use crate::database;
|
||||||
use hbb_common::{
|
use hbb_common::{
|
||||||
|
bytes::Bytes,
|
||||||
log,
|
log,
|
||||||
rendezvous_proto::*,
|
rendezvous_proto::*,
|
||||||
tokio::sync::{Mutex, RwLock},
|
tokio::sync::{Mutex, RwLock},
|
||||||
bytes::Bytes,
|
|
||||||
ResultType,
|
ResultType,
|
||||||
};
|
};
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
@ -81,15 +81,22 @@ pub async fn start(port: &str, key: &str) -> ResultType<()> {
|
|||||||
log::info!("Listening on tcp {}", addr);
|
log::info!("Listening on tcp {}", addr);
|
||||||
let addr2 = format!("0.0.0.0:{}", port.parse::<u16>().unwrap() + 2);
|
let addr2 = format!("0.0.0.0:{}", port.parse::<u16>().unwrap() + 2);
|
||||||
log::info!("Listening on websocket {}", addr2);
|
log::info!("Listening on websocket {}", addr2);
|
||||||
loop {
|
let main_task = async move {
|
||||||
log::info!("Start");
|
loop {
|
||||||
io_loop(
|
log::info!("Start");
|
||||||
new_listener(&addr, false).await?,
|
io_loop(
|
||||||
new_listener(&addr2, false).await?,
|
new_listener(&addr, false).await?,
|
||||||
&key,
|
new_listener(&addr2, false).await?,
|
||||||
)
|
&key,
|
||||||
.await;
|
)
|
||||||
}
|
.await;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let listen_signal = crate::common::listen_signal();
|
||||||
|
tokio::select!(
|
||||||
|
res = main_task => res,
|
||||||
|
res = listen_signal => res,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_params() {
|
fn check_params() {
|
||||||
|
@ -170,37 +170,44 @@ impl RendezvousServer {
|
|||||||
allow_err!(test_hbbs(test_addr).await);
|
allow_err!(test_hbbs(test_addr).await);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
loop {
|
let main_task = async move {
|
||||||
log::info!("Start");
|
loop {
|
||||||
match rs
|
log::info!("Start");
|
||||||
.io_loop(
|
match rs
|
||||||
&mut rx,
|
.io_loop(
|
||||||
&mut listener,
|
&mut rx,
|
||||||
&mut listener2,
|
&mut listener,
|
||||||
&mut listener3,
|
&mut listener2,
|
||||||
&mut socket,
|
&mut listener3,
|
||||||
&key,
|
&mut socket,
|
||||||
)
|
&key,
|
||||||
.await
|
)
|
||||||
{
|
.await
|
||||||
LoopFailure::UdpSocket => {
|
{
|
||||||
drop(socket);
|
LoopFailure::UdpSocket => {
|
||||||
socket = FramedSocket::new_with_buf_size(&addr, rmem).await?;
|
drop(socket);
|
||||||
}
|
socket = FramedSocket::new_with_buf_size(&addr, rmem).await?;
|
||||||
LoopFailure::Listener => {
|
}
|
||||||
drop(listener);
|
LoopFailure::Listener => {
|
||||||
listener = new_listener(&addr, false).await?;
|
drop(listener);
|
||||||
}
|
listener = new_listener(&addr, false).await?;
|
||||||
LoopFailure::Listener2 => {
|
}
|
||||||
drop(listener2);
|
LoopFailure::Listener2 => {
|
||||||
listener2 = new_listener(&addr2, false).await?;
|
drop(listener2);
|
||||||
}
|
listener2 = new_listener(&addr2, false).await?;
|
||||||
LoopFailure::Listener3 => {
|
}
|
||||||
drop(listener3);
|
LoopFailure::Listener3 => {
|
||||||
listener3 = new_listener(&addr3, false).await?;
|
drop(listener3);
|
||||||
|
listener3 = new_listener(&addr3, false).await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
let listen_signal = listen_signal();
|
||||||
|
tokio::select!(
|
||||||
|
res = main_task => res,
|
||||||
|
res = listen_signal => res,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn io_loop(
|
async fn io_loop(
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
pub const VERSION: &str = "1.1.6";
|
pub const VERSION: &str = "1.1.6";
|
||||||
pub const BUILD_DATE: &str = "2023-01-06 11:03";
|
pub const BUILD_DATE: &str = "2023-01-06 11:03";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user