Просмотр исходного кода

dnetview: use the new rpc client api

ghassmo 4 лет назад
Родитель
Сommit
69fe7485b7
1 измененных файлов с 11 добавлено и 33 удалено
  1. 11 33
      bin/dnetview/src/main.rs

+ 11 - 33
bin/dnetview/src/main.rs

@@ -3,7 +3,7 @@ use std::{collections::hash_map::Entry, fs::File, io, io::Read, path::PathBuf};
 
 use easy_parallel::Parallel;
 use fxhash::{FxHashMap, FxHashSet};
-use log::{debug, info};
+use log::info;
 use serde_json::{json, Value};
 use simplelog::*;
 use smol::Executor;
@@ -16,8 +16,8 @@ use tui::{
 use url::Url;
 
 use darkfi::{
-    error::{Error, Result},
-    rpc::{jsonrpc, jsonrpc::JsonResult},
+    error::Result,
+    rpc::{jsonrpc, rpcclient::RpcClient},
     util::{
         async_util,
         cli::{log_config, spawn_config, Config},
@@ -35,51 +35,28 @@ use dnetview::{
 };
 
 struct DnetView {
-    url: Url,
     name: String,
+    rpc_client: RpcClient,
 }
 
 impl DnetView {
-    fn new(url: Url, name: String) -> Self {
-        Self { url, name }
-    }
-
-    async fn request(&self, r: jsonrpc::JsonRequest) -> Result<Value> {
-        let reply: JsonResult = match jsonrpc::send_request(&self.url, json!(r)).await {
-            Ok(v) => v,
-            Err(e) => return Err(e),
-        };
-
-        match reply {
-            JsonResult::Resp(r) => {
-                debug!(target: "RPC", "<-- {}", serde_json::to_string(&r)?);
-                Ok(r.result)
-            }
-
-            JsonResult::Err(e) => {
-                debug!(target: "RPC", "<-- {}", serde_json::to_string(&e)?);
-                Err(Error::JsonRpcError(e.error.message.to_string()))
-            }
-
-            JsonResult::Notif(n) => {
-                debug!(target: "RPC", "<-- {}", serde_json::to_string(&n)?);
-                Err(Error::JsonRpcError("Unexpected reply".to_string()))
-            }
-        }
+    async fn new(url: Url, name: String, executor: Arc<Executor<'_>>) -> Result<Self> {
+        let rpc_client = RpcClient::new(url, executor).await?;
+        Ok(Self { name, rpc_client })
     }
 
     // --> {"jsonrpc": "2.0", "method": "ping", "params": [], "id": 42}
     // <-- {"jsonrpc": "2.0", "result": "pong", "id": 42}
     async fn _ping(&self) -> Result<Value> {
         let req = jsonrpc::request(json!("ping"), json!([]));
-        Ok(self.request(req).await?)
+        Ok(self.rpc_client.request(req).await?)
     }
 
     //--> {"jsonrpc": "2.0", "method": "poll", "params": [], "id": 42}
     // <-- {"jsonrpc": "2.0", "result": {"nodeID": [], "nodeinfo" [], "id": 42}
     async fn get_info(&self) -> Result<Value> {
         let req = jsonrpc::request(json!("get_info"), json!([]));
-        Ok(self.request(req).await?)
+        Ok(self.rpc_client.request(req).await?)
     }
 }
 
@@ -141,7 +118,8 @@ async fn poll_and_update_model(
     model: Arc<Model>,
 ) -> DnetViewResult<()> {
     for node in &config.nodes {
-        let client = DnetView::new(Url::parse(&node.rpc_url)?, node.name.clone());
+        let client =
+            DnetView::new(Url::parse(&node.rpc_url)?, node.name.clone(), ex.clone()).await?;
         ex.spawn(poll(client, model.clone())).detach();
     }
     Ok(())