Răsfoiți Sursa

drk: properly stop rpc client on termination

skoupidi 2 ani în urmă
părinte
comite
ec9a8f45fe
1 a modificat fișierele cu 34 adăugiri și 25 ștergeri
  1. 34 25
      bin/drk/src/main.rs

+ 34 - 25
bin/drk/src/main.rs

@@ -610,12 +610,20 @@ impl Drk {
         println!("Executing ping request to darkfid...");
         let latency = Instant::now();
         let req = JsonRequest::new("ping", JsonValue::Array(vec![]));
-        let rep = self.rpc_client.as_ref().unwrap().oneshot_request(req).await?;
+        let rep = self.rpc_client.as_ref().unwrap().request(req).await?;
         let latency = latency.elapsed();
         println!("Got reply: {rep:?}");
         println!("Latency: {latency:?}");
         Ok(())
     }
+
+    /// Auxiliary function to stop current JSON-RPC client, if its initialized.
+    async fn stop_rpc_client(&self) -> Result<()> {
+        if let Some(ref rpc_client) = self.rpc_client {
+            rpc_client.stop().await;
+        };
+        Ok(())
+    }
 }
 
 async_daemonize!(realmain);
@@ -628,7 +636,8 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
         Subcmd::Ping => {
             let drk = Drk::new(args.wallet_path, args.wallet_pass, Some(args.endpoint), ex).await?;
-            drk.ping().await
+            drk.ping().await?;
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Completions { shell } => generate_completions(&shell),
@@ -882,7 +891,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
         Subcmd::Spend => {
             let tx = parse_tx_from_stdin().await?;
 
-            let drk = Drk::new(args.wallet_path, args.wallet_pass, Some(args.endpoint), ex).await?;
+            let drk = Drk::new(args.wallet_path, args.wallet_pass, None, ex).await?;
 
             if let Err(e) = drk.mark_tx_spend(&tx).await {
                 eprintln!("Failed to mark transaction coins as spent: {e:?}");
@@ -988,7 +997,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
             println!("{}", base64::encode(&serialize_async(&tx).await));
 
-            Ok(())
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Otc { command } => match command {
@@ -1007,7 +1016,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 };
 
                 println!("{}", base64::encode(&serialize_async(&half).await));
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             OtcSubcmd::Join => {
@@ -1031,7 +1040,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 };
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             OtcSubcmd::Inspect => {
@@ -1206,7 +1215,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 };
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             DaoSubcmd::ProposeTransfer {
@@ -1289,7 +1298,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 println!("Generated proposal: {}", proposal.bulla());
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             DaoSubcmd::Proposals { name } => {
@@ -1330,7 +1339,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                     // Export it to base64
                     println!("{}", base64::encode(&serialize_async(&enc_note).await));
-                    return Ok(())
+                    return drk.stop_rpc_client().await
                 }
 
                 if mint_proposal {
@@ -1345,7 +1354,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                             };
 
                             println!("{}", base64::encode(&serialize_async(&tx).await));
-                            return Ok(())
+                            return drk.stop_rpc_client().await
                         }
                     }
 
@@ -1467,7 +1476,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 if let Some(exec_tx_hash) = proposal.exec_tx_hash {
                     println!("Proposal was executed on transaction: {exec_tx_hash}");
-                    return Ok(())
+                    return drk.stop_rpc_client().await
                 }
 
                 // Retrieve current block height and compute current window
@@ -1482,7 +1491,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 println!("Voting status: {voting_status}");
                 println!("{proposal_status_message}");
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             DaoSubcmd::ProposalImport {} => {
@@ -1557,7 +1566,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 };
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             DaoSubcmd::Exec { bulla } => {
@@ -1584,7 +1593,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                         };
 
                         println!("{}", base64::encode(&serialize_async(&tx).await));
-                        return Ok(())
+                        return drk.stop_rpc_client().await
                     }
                 }
 
@@ -1614,7 +1623,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
             println!("{}", base64::encode(&serialize_async(&tx).await));
 
-            Ok(())
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Inspect => {
@@ -1650,7 +1659,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
             println!("Transaction ID: {txid}");
 
-            Ok(())
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Subscribe => {
@@ -1667,7 +1676,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 exit(2);
             }
 
-            Ok(())
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Scan { reset } => {
@@ -1681,7 +1690,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 }
                 println!("Finished scanning blockchain");
 
-                return Ok(())
+                return drk.stop_rpc_client().await
             }
 
             if let Err(e) = drk.scan_blocks(false).await {
@@ -1690,7 +1699,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
             }
             println!("Finished scanning blockchain");
 
-            Ok(())
+            drk.stop_rpc_client().await
         }
 
         Subcmd::Explorer { command } => match command {
@@ -1726,7 +1735,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                     println!("{tx:?}");
                 }
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             ExplorerSubcmd::SimulateTx => {
@@ -1746,7 +1755,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
                 println!("Transaction ID: {}", tx.hash());
                 println!("State: {}", if is_valid { "valid" } else { "invalid" });
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             ExplorerSubcmd::TxsHistory { tx_hash, encode } => {
@@ -2002,7 +2011,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             TokenSubcmd::Freeze { token } => {
@@ -2026,7 +2035,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
         },
 
@@ -2086,7 +2095,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
 
             ContractSubcmd::Lock { deploy_auth } => {
@@ -2108,7 +2117,7 @@ async fn realmain(args: Args, ex: Arc<smol::Executor<'static>>) -> Result<()> {
 
                 println!("{}", base64::encode(&serialize_async(&tx).await));
 
-                Ok(())
+                drk.stop_rpc_client().await
             }
         },
     }