From db71798db2ba7ede27f2ad7f2428cffbf8f1e98c Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 21 Oct 2025 22:23:52 +0800 Subject: feat: peer cmd refactor: Ui now takes network --- src/main.rs | 10 +++------- src/network.rs | 7 ++++--- src/ui.rs | 41 ++++++++++++++++++++++++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index 162f8de..9412390 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,18 +24,14 @@ async fn main() { Network::broadcast(network.clone(), Request::Ibd(None)).await; - let (blockchain, me) = { + let me = { let net = network .lock() .await; - ( - net.get_blockchain() - .clone(), - *net.get_me(), - ) + *net.get_me() }; - let mut ui = Ui::new(blockchain, me); + let mut ui = Ui::new(Arc::downgrade(&network), me); loop { let mut cmd = String::new(); diff --git a/src/network.rs b/src/network.rs index 181bb2c..72f47e7 100644 --- a/src/network.rs +++ b/src/network.rs @@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize}; use futures::stream::{SplitSink, SplitStream}; use futures::{SinkExt, StreamExt}; +use tokio::net::ToSocketAddrs; use tokio::{ net::{TcpListener, TcpStream}, spawn, @@ -72,8 +73,8 @@ impl Network { this } - async fn try_peer(this: Weak>) { - let stream = TcpStream::connect("192.168.1.16:6767") + pub async fn try_peer(this: Weak>, ip: impl ToSocketAddrs) { + let stream = TcpStream::connect(ip) .await .unwrap(); let peer = Arc::new(Mutex::new(Peer::new(this.clone(), stream))); @@ -132,7 +133,7 @@ impl Network { .this .clone(); spawn(async move { - Network::try_peer(this).await; + Network::try_peer(this, "192.168.1.16:6767").await; }); self.get_idb() diff --git a/src/ui.rs b/src/ui.rs index 697c7f3..a6a1cd6 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,17 +1,22 @@ -use std::sync::Arc; +use std::sync::{Arc, Weak}; -use bitcoin::{blocks::BlockChain, client::Client, network::Request, transaction::Transaction}; +use bitcoin::{ + blocks::BlockChain, + client::Client, + network::{Network, Request}, + transaction::Transaction, +}; use tokio::sync::Mutex; pub struct Ui { - blockchain: Arc>, + network: Weak>, me: Client, } impl Ui { - pub fn new(blockchain: Arc>, me: Client) -> Self { + pub fn new(network: Weak>, me: Client) -> Self { Self { - blockchain, + network, me, } } @@ -34,7 +39,12 @@ impl Ui { .unwrap(), ); return Some(Request::Block( - self.blockchain + self.network + .upgrade() + .unwrap() + .lock() + .await + .get_blockchain() .lock() .await .new_block(trans), @@ -44,11 +54,28 @@ impl Ui { if cmd[0] == "bc" { println!( "{:#?}", - self.blockchain + self.network + .upgrade() + .unwrap() + .lock() + .await + .get_blockchain() .lock() .await ); } + + if cmd[0] == "peer" { + if cmd[1] == "add" { + Network::try_peer( + self.network + .clone(), + cmd[2], + ) + .await; + } + } + None } } -- cgit v1.2.3