wip: modular
This commit is contained in:
parent
6df632bc76
commit
97ab962ae2
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"rust-analyzer.linkedProjects": [
|
||||||
|
"./Cargo.toml",
|
||||||
|
]
|
||||||
|
}
|
||||||
17
src/bin/init.rs
Normal file
17
src/bin/init.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
use std::error;
|
||||||
|
use wingmate_rs::init;
|
||||||
|
use tokio::task::{self, JoinHandle};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
|
let sig_handler_fn: JoinHandle<Result<(), Box<dyn error::Error + Send + Sync>>> = task::spawn(async {
|
||||||
|
init::sighandler::sighandler().await
|
||||||
|
});
|
||||||
|
|
||||||
|
if let Err(v) = sig_handler_fn.await? {
|
||||||
|
return Err(v as Box<dyn error::Error>)
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
1
src/init.rs
Normal file
1
src/init.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod sighandler;
|
||||||
23
src/init/sighandler.rs
Normal file
23
src/init/sighandler.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use std::error;
|
||||||
|
use tokio::signal::unix::{signal, SignalKind};
|
||||||
|
use tokio::select;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub async fn sighandler() -> Result<(), Box<dyn error::Error + Send + Sync>> {
|
||||||
|
let mut sigint = signal(SignalKind::interrupt())?;
|
||||||
|
let mut sigterm = signal(SignalKind::terminate())?;
|
||||||
|
let mut sigchld = signal(SignalKind::child())?;
|
||||||
|
select! {
|
||||||
|
_ = sigint.recv() => {
|
||||||
|
println!("got SIGINT");
|
||||||
|
},
|
||||||
|
_ = sigterm.recv() => {
|
||||||
|
println!("got SIGTERM");
|
||||||
|
},
|
||||||
|
_ = sigchld.recv() => {
|
||||||
|
// return Err(())
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
1
src/lib.rs
Normal file
1
src/lib.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod init;
|
||||||
46
src/main.rs
46
src/main.rs
@ -1,46 +0,0 @@
|
|||||||
use std::fmt;
|
|
||||||
use std::error::Error;
|
|
||||||
use tokio::signal::unix::{signal, SignalKind};
|
|
||||||
use tokio::select;
|
|
||||||
use tokio::task::{self, JoinHandle};
|
|
||||||
|
|
||||||
#[derive(Debug,Clone)]
|
|
||||||
struct InvalidState;
|
|
||||||
|
|
||||||
impl fmt::Display for InvalidState {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
write!(f, "cannot recover the state")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Error for InvalidState {}
|
|
||||||
|
|
||||||
#[tokio::main]
|
|
||||||
async fn main() -> Result<(), Box<dyn Error>> {
|
|
||||||
|
|
||||||
let sighandler: JoinHandle<Result<(), Box<dyn Error + Send + Sync>>> = task::spawn(async {
|
|
||||||
let mut sigint = signal(SignalKind::interrupt())?;
|
|
||||||
let mut sigterm = signal(SignalKind::terminate())?;
|
|
||||||
let mut sigchld = signal(SignalKind::child())?;
|
|
||||||
select! {
|
|
||||||
_ = sigint.recv() => {
|
|
||||||
println!("got SIGINT");
|
|
||||||
},
|
|
||||||
_ = sigterm.recv() => {
|
|
||||||
println!("got SIGTERM");
|
|
||||||
return Err(InvalidState.into());
|
|
||||||
},
|
|
||||||
_ = sigchld.recv() => {
|
|
||||||
// return Err(())
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
});
|
|
||||||
|
|
||||||
if let Err(v) = sighandler.await? {
|
|
||||||
return Err(v as Box<dyn Error>)
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user