Преглед изворни кода

moved mutex up to CashierClient reqprotocol object

lunar-mining пре 5 година
родитељ
комит
fdc098c17f
3 измењених фајлова са 11 додато и 8 уклоњено
  1. 1 1
      src/rpc/adapter.rs
  2. 2 2
      src/rpc/jsonserver.rs
  3. 8 5
      src/service/cashier.rs

+ 1 - 1
src/rpc/adapter.rs

@@ -85,7 +85,7 @@ impl RpcAdapter {
         Ok(())
     }
 
-    pub async fn deposit(&mut self) -> Result<PubAddress> {
+    pub async fn deposit(&self) -> Result<PubAddress> {
         debug!(target: "deposit", "deposit: START");
         let (public, private) = self.wallet.key_gen();
         self.wallet.put_keypair(public, private)?;

+ 2 - 2
src/rpc/jsonserver.rs

@@ -243,8 +243,8 @@ impl RpcInterface {
             let self2 = self1.clone();
             async move {
                 println!("Deposit initiated");
-                // let btckey = self2.adapter.deposit().await?;
-                Ok(jsonrpc_core::Value::String(format!("Send testnet BTC to")))
+                 let btckey = self2.adapter.deposit().await?;
+                Ok(jsonrpc_core::Value::String(format!("Send testnet BTC to: {}", btckey)))
             }
         });
 

+ 8 - 5
src/service/cashier.rs

@@ -15,6 +15,7 @@ use async_executor::Executor;
 use async_std::sync::Arc;
 use log::*;
 use std::net::SocketAddr;
+use async_std::sync::Mutex;
 
 #[repr(u8)]
 enum CashierError {
@@ -171,27 +172,29 @@ impl CashierService {
 }
 
 pub struct CashierClient {
-    protocol: ReqProtocol,
+    protocol: Mutex<ReqProtocol>,
 }
 
 impl CashierClient {
     pub fn new(addr: SocketAddr) -> Result<Self> {
-        let protocol = ReqProtocol::new(addr, String::from("CASHIER CLIENT"));
+        let protocol = Mutex::new(ReqProtocol::new(addr, String::from("CASHIER CLIENT")));
 
         Ok(CashierClient { protocol })
     }
 
-    pub async fn start(&mut self) -> Result<()> {
+    pub async fn start(&self) -> Result<()> {
         debug!(target: "Cashier", "Start CashierClient");
-        self.protocol.start().await?;
+        self.protocol.lock().await.start().await?;
 
         Ok(())
     }
 
-    pub async fn get_address(&mut self, index: jubjub::SubgroupPoint) -> Result<Option<PubAddress>> {
+    pub async fn get_address(&self, index: jubjub::SubgroupPoint) -> Result<Option<PubAddress>> {
         let handle_error = Arc::new(handle_error);
         let rep = self
             .protocol
+            .lock()
+            .await
             .request(
                 CashierCommand::GetDBTC as u8,
                 serialize(&index),