diff --git a/src/bin/cashierd.rs b/src/bin/cashierd.rs index 8adde5866..bfdf6afbe 100644 --- a/src/bin/cashierd.rs +++ b/src/bin/cashierd.rs @@ -12,12 +12,14 @@ use drk::service::GatewayClient; use drk::util::join_config_path; use drk::wallet::CashierDb; use drk::{Error, Result}; +use drk::rpc::jsonserver; use log::*; use async_executor::Executor; use easy_parallel::Parallel; -async fn start(executor: Arc>, config: Arc<&CashierdConfig>) -> Result<()> { +async fn start(executor: Arc>, config: Arc) -> Result<()> { + let ex = executor.clone(); let accept_addr: SocketAddr = config.accept_url.parse()?; let gateway_addr: SocketAddr = config.gateway_url.parse()?; @@ -38,9 +40,13 @@ async fn start(executor: Arc>, config: Arc<&CashierdConfig>) -> Res debug!(target: "cashierd", "starting cashier service"); let cashier = CashierService::new(accept_addr, btc_endpoint, wallet.clone(), gateway)?; - cashier.start(executor.clone()).await?; + cashier.start(ex.clone()).await?; + + let rpc_url: std::net::SocketAddr = config.rpc_url.parse()?; + let adapter = Arc::new(CashierAdapter::new(wallet.clone())?); + let io = Arc::new(adapter.handle_input()?); + jsonserver::start(ex, rpc_url, io).await?; - let _adapter = Arc::new(CashierAdapter::new(wallet.clone())?); Ok(()) } @@ -56,7 +62,7 @@ fn main() -> Result<()> { Config::::load_default(path)? }; - let config_ptr = Arc::new(&config); + let config = Arc::new(config); let options = CashierdCli::load()?; @@ -90,7 +96,7 @@ fn main() -> Result<()> { // Run the main future on the current thread. .finish(|| { smol::future::block_on(async move { - start(ex2, config_ptr).await?; + start(ex2, config).await?; drop(signal); Ok::<(), Error>(()) }) diff --git a/src/cli/cli_config.rs b/src/cli/cli_config.rs index 84d2a3d12..f8c21d56b 100644 --- a/src/cli/cli_config.rs +++ b/src/cli/cli_config.rs @@ -187,6 +187,10 @@ pub struct CashierdConfig { #[serde(rename = "accept_url")] pub accept_url: String, + #[serde(default)] + #[serde(rename = "rpc_url")] + pub rpc_url: String, + #[serde(default)] #[serde(rename = "database_path")] pub database_path: String, @@ -211,6 +215,7 @@ pub struct CashierdConfig { impl Default for CashierdConfig { fn default() -> Self { let accept_url = String::from("127.0.0.1:7777"); + let rpc_url = String::from("http://127.0.0.1:8000"); let gateway_url = String::from("127.0.0.1:3333"); let database_path = String::from("cashierd.db"); let btc_endpoint = String::from("tcp://electrum.blockstream.info:50001"); @@ -222,6 +227,7 @@ impl Default for CashierdConfig { let password = String::new(); Self { accept_url, + rpc_url, database_path, btc_endpoint, gateway_url, diff --git a/src/rpc/adapters/cashier_adapter.rs b/src/rpc/adapters/cashier_adapter.rs index 54caeac97..a1dd94fdb 100644 --- a/src/rpc/adapters/cashier_adapter.rs +++ b/src/rpc/adapters/cashier_adapter.rs @@ -14,8 +14,8 @@ impl CashierAdapter { pub fn handle_input( self: Arc, - mut io: jsonrpc_core::IoHandler, ) -> Result { + let mut io = jsonrpc_core::IoHandler::new(); io.add_sync_method("cashier_hello", |_| { Ok(jsonrpc_core::Value::String("hello world!".into())) }); diff --git a/src/service/cashier.rs b/src/service/cashier.rs index ff5d9efb4..c493427b5 100644 --- a/src/service/cashier.rs +++ b/src/service/cashier.rs @@ -84,6 +84,8 @@ impl CashierService { let _ = handle_request_task.cancel().await; + //let rpc_url: std::net::SocketAddr = config.rpc_url.parse()?; + Ok(()) }