Updates
This commit is contained in:
		@@ -1,6 +1,14 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "hero-server-unix"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
edition = "2024"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
anyhow = "1.0"
 | 
			
		||||
clap = { version = "4.5", features = ["derive"] }
 | 
			
		||||
tracing = "0.1"
 | 
			
		||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
 | 
			
		||||
tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] }
 | 
			
		||||
 | 
			
		||||
# Reuse the OpenRPC server crate that registers all methods and now supports IPC
 | 
			
		||||
hero-openrpc-server = { path = "../../openrpc/server" }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,64 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
    println!("Hello, world!");
 | 
			
		||||
use std::path::PathBuf;
 | 
			
		||||
 | 
			
		||||
use clap::Parser;
 | 
			
		||||
use tracing_subscriber::EnvFilter;
 | 
			
		||||
 | 
			
		||||
use hero_openrpc_server::{OpenRpcServer, OpenRpcServerConfig, Transport};
 | 
			
		||||
 | 
			
		||||
/// IPC (Unix socket) JSON-RPC server launcher.
 | 
			
		||||
///
 | 
			
		||||
/// This binary starts the OpenRPC server over a Unix domain socket using the reth-ipc transport.
 | 
			
		||||
#[derive(Parser, Debug)]
 | 
			
		||||
#[command(name = "hero-server-unix", version, about = "Start the JSON-RPC IPC server")]
 | 
			
		||||
struct Args {
 | 
			
		||||
    /// Filesystem path to the Unix domain socket
 | 
			
		||||
    #[arg(long, default_value = "/tmp/baobab.ipc", env = "HERO_IPC_SOCKET")]
 | 
			
		||||
    socket_path: PathBuf,
 | 
			
		||||
 | 
			
		||||
    /// Optional path to a supervisor configuration file
 | 
			
		||||
    #[arg(long)]
 | 
			
		||||
    supervisor_config: Option<PathBuf>,
 | 
			
		||||
 | 
			
		||||
    /// Database path (reserved for future use)
 | 
			
		||||
    #[arg(long, default_value = "./db", env = "HERO_DB_PATH")]
 | 
			
		||||
    db_path: PathBuf,
 | 
			
		||||
 | 
			
		||||
    /// Log filter (e.g., info, debug, trace)
 | 
			
		||||
    #[arg(long, default_value = "info", env = "RUST_LOG")]
 | 
			
		||||
    log: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() -> anyhow::Result<()> {
 | 
			
		||||
    let args = Args::parse();
 | 
			
		||||
 | 
			
		||||
    // Initialize tracing with provided log filter
 | 
			
		||||
    tracing_subscriber::FmtSubscriber::builder()
 | 
			
		||||
        .with_env_filter(EnvFilter::new(args.log.clone()))
 | 
			
		||||
        .try_init()
 | 
			
		||||
        .expect("setting default subscriber failed");
 | 
			
		||||
 | 
			
		||||
    let cfg = OpenRpcServerConfig {
 | 
			
		||||
        transport: Transport::Unix(args.socket_path.clone()),
 | 
			
		||||
        supervisor_config_path: args.supervisor_config.clone(),
 | 
			
		||||
        db_path: args.db_path.clone(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Build server state
 | 
			
		||||
    let server = OpenRpcServer::new(cfg.clone()).await?;
 | 
			
		||||
 | 
			
		||||
    // Start IPC server
 | 
			
		||||
    let handle = server.start(cfg).await?;
 | 
			
		||||
 | 
			
		||||
    tracing::info!(
 | 
			
		||||
        "IPC server started on {} (press Ctrl+C to stop)",
 | 
			
		||||
        args.socket_path.display()
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Run until stopped
 | 
			
		||||
    tokio::spawn(handle.stopped());
 | 
			
		||||
    tokio::signal::ctrl_c().await?;
 | 
			
		||||
    tracing::info!("Shutting down IPC server");
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user