Add [[bin]] target and main.rs that starts the IPC server with env_logger, socket path from XDG_RUNTIME_DIR, and graceful shutdown via ctrlc signal handler. Also add socket_path() to paths module.
39 lines
991 B
Rust
39 lines
991 B
Rust
use log::info;
|
|
|
|
use owlry_core::paths;
|
|
use owlry_core::server::Server;
|
|
|
|
fn main() {
|
|
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("warn")).init();
|
|
|
|
let sock = paths::socket_path();
|
|
info!("Starting owlry-core daemon...");
|
|
|
|
// Ensure the socket parent directory exists
|
|
if let Err(e) = paths::ensure_parent_dir(&sock) {
|
|
eprintln!("Failed to create socket directory: {e}");
|
|
std::process::exit(1);
|
|
}
|
|
|
|
let server = match Server::bind(&sock) {
|
|
Ok(s) => s,
|
|
Err(e) => {
|
|
eprintln!("Failed to start owlry-core: {e}");
|
|
std::process::exit(1);
|
|
}
|
|
};
|
|
|
|
// Graceful shutdown on SIGTERM/SIGINT
|
|
let sock_cleanup = sock.clone();
|
|
ctrlc::set_handler(move || {
|
|
let _ = std::fs::remove_file(&sock_cleanup);
|
|
std::process::exit(0);
|
|
})
|
|
.ok();
|
|
|
|
if let Err(e) = server.run() {
|
|
eprintln!("Server error: {e}");
|
|
std::process::exit(1);
|
|
}
|
|
}
|