From 407b32eb2540612da874c807a48ca68e416e6ec6 Mon Sep 17 00:00:00 2001 From: darkfi Date: Tue, 10 Sep 2024 08:08:36 +0200 Subject: [PATCH] evgrd: add Daemon struct --- script/evgrd/src/main.rs | 77 +++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/script/evgrd/src/main.rs b/script/evgrd/src/main.rs index e1fd2acf4..09e372c1f 100644 --- a/script/evgrd/src/main.rs +++ b/script/evgrd/src/main.rs @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -use std::sync::{Arc, Mutex as SyncMutex}; +use std::{sync::{Arc, Mutex as SyncMutex}, path::PathBuf}; use darkfi::{ async_daemonize, cli_desc, event_graph::{proto::ProtocolEventGraph, EventGraph, EventGraphPtr}, @@ -91,6 +91,44 @@ struct Args { net: NetSettingsOpt, } +pub struct Daemon { + /// P2P network pointer + p2p: P2pPtr, + /// Sled DB (also used in event_graph and for RLN) + sled: sled::Db, + /// Event Graph instance + event_graph: EventGraphPtr, + /// JSON-RPC connection tracker + //rpc_connections: Mutex>, + /// dnet JSON-RPC subscriber + dnet_sub: JsonSubscriber, + /// deg JSON-RPC subscriber + deg_sub: JsonSubscriber, + /// Replay logs (DB) path + replay_datastore: PathBuf, +} + +impl Daemon { + fn new( + p2p: P2pPtr, + sled: sled::Db, + event_graph: EventGraphPtr, + dnet_sub: JsonSubscriber, + deg_sub: JsonSubscriber, + replay_datastore: PathBuf, + ) -> Self { + Self { + p2p, + sled, + event_graph, + //rpc_connections: Mutex::new(HashSet::new()), + dnet_sub, + deg_sub, + replay_datastore, + } + } +} + async_daemonize!(realmain); async fn realmain(args: Args, ex: Arc>) -> Result<()> { info!("Starting evgrd node"); @@ -178,9 +216,8 @@ async fn realmain(args: Args, ex: Arc>) -> Result<()> { ex.clone(), ); - /* info!("Starting JSON-RPC server"); - let darkirc = Arc::new(DarkIrc::new( + let daemon = Arc::new(Daemon::new( p2p.clone(), sled_db.clone(), event_graph.clone(), @@ -188,46 +225,20 @@ async fn realmain(args: Args, ex: Arc>) -> Result<()> { deg_sub, replay_datastore.clone(), )); - let darkirc_ = Arc::clone(&darkirc); + let daemon_ = Arc::clone(&daemon); + /* let rpc_task = StoppableTask::new(); rpc_task.clone().start( - listen_and_serve(args.rpc_listen, darkirc.clone(), None, ex.clone()), + listen_and_serve(args.rpc_listen, daemon.clone(), None, ex.clone()), |res| async move { match res { - Ok(()) | Err(Error::RpcServerStopped) => darkirc_.stop_connections().await, + Ok(()) | Err(Error::RpcServerStopped) => daemon_.stop_connections().await, Err(e) => error!("Failed stopping JSON-RPC server: {}", e), } }, Error::RpcServerStopped, ex.clone(), ); - - info!("Starting IRC server"); - let password = args.password.unwrap_or_default(); - let config_path = get_config_path(args.config, CONFIG_FILE)?; - let irc_server = IrcServer::new( - darkirc.clone(), - args.irc_listen, - args.irc_tls_cert, - args.irc_tls_secret, - config_path, - password, - ) - .await?; - - let irc_task = StoppableTask::new(); - let ex_ = ex.clone(); - irc_task.clone().start( - irc_server.clone().listen(ex_), - |res| async move { - match res { - Ok(()) | Err(Error::DetachedTaskStopped) => { /* TODO: */ } - Err(e) => error!("Failed stopping IRC server: {}", e), - } - }, - Error::DetachedTaskStopped, - ex.clone(), - ); */ info!("Starting P2P network");