WIP1: implementing JSON-RPC calls over Unix Sockets
This commit is contained in:
34
src/main.rs
34
src/main.rs
@@ -40,6 +40,14 @@ struct Args {
|
||||
#[arg(long, default_value = "8080")]
|
||||
rpc_port: u16,
|
||||
|
||||
/// Enable RPC over Unix Domain Socket (IPC)
|
||||
#[arg(long)]
|
||||
enable_rpc_ipc: bool,
|
||||
|
||||
/// RPC IPC socket path (Unix Domain Socket)
|
||||
#[arg(long, default_value = "/tmp/herodb.ipc")]
|
||||
rpc_ipc_path: String,
|
||||
|
||||
/// Use the sled backend
|
||||
#[arg(long)]
|
||||
sled: bool,
|
||||
@@ -105,7 +113,7 @@ async fn main() {
|
||||
let rpc_addr = format!("127.0.0.1:{}", args.rpc_port).parse().unwrap();
|
||||
let base_dir = args.dir.clone();
|
||||
|
||||
match rpc_server::start_rpc_server(rpc_addr, base_dir, backend, args.admin_secret.clone()).await {
|
||||
match rpc_server::start_rpc_server(rpc_addr, base_dir, backend.clone(), args.admin_secret.clone()).await {
|
||||
Ok(handle) => {
|
||||
println!("RPC management server started on port {}", args.rpc_port);
|
||||
Some(handle)
|
||||
@@ -119,6 +127,30 @@ async fn main() {
|
||||
None
|
||||
};
|
||||
|
||||
// Start IPC (Unix socket) RPC server if enabled
|
||||
let _rpc_ipc_handle = if args.enable_rpc_ipc {
|
||||
let base_dir = args.dir.clone();
|
||||
let ipc_path = args.rpc_ipc_path.clone();
|
||||
|
||||
// Remove stale socket if present
|
||||
if std::path::Path::new(&ipc_path).exists() {
|
||||
let _ = std::fs::remove_file(&ipc_path);
|
||||
}
|
||||
|
||||
match rpc_server::start_rpc_ipc_server(ipc_path.clone(), base_dir, backend.clone(), args.admin_secret.clone()).await {
|
||||
Ok(handle) => {
|
||||
println!("RPC IPC server started at {}", ipc_path);
|
||||
Some(handle)
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Failed to start RPC IPC server: {}", e);
|
||||
None
|
||||
}
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
// accept new connections
|
||||
loop {
|
||||
let stream = listener.accept().await;
|
||||
|
||||
Reference in New Issue
Block a user