diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-10-21 22:23:52 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-10-21 22:48:29 +0800 |
| commit | db71798db2ba7ede27f2ad7f2428cffbf8f1e98c (patch) | |
| tree | e6e2895b6f6d59dff5759ae6f54144e5328411ec /src | |
| parent | a2d6e450fd488cb737474f0ff9810c2d1f9108cf (diff) | |
feat: peer cmd
refactor: Ui now takes network
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 10 | ||||
| -rw-r--r-- | src/network.rs | 7 | ||||
| -rw-r--r-- | 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<Mutex<Self>>) { - let stream = TcpStream::connect("192.168.1.16:6767") + pub async fn try_peer(this: Weak<Mutex<Self>>, 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() @@ -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<Mutex<BlockChain>>, + network: Weak<Mutex<Network>>, me: Client, } impl Ui { - pub fn new(blockchain: Arc<Mutex<BlockChain>>, me: Client) -> Self { + pub fn new(network: Weak<Mutex<Network>>, 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 } } |
