summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-10-21 22:23:52 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-10-21 22:48:29 +0800
commitdb71798db2ba7ede27f2ad7f2428cffbf8f1e98c (patch)
treee6e2895b6f6d59dff5759ae6f54144e5328411ec
parenta2d6e450fd488cb737474f0ff9810c2d1f9108cf (diff)
feat: peer cmd
refactor: Ui now takes network
-rw-r--r--src/main.rs10
-rw-r--r--src/network.rs7
-rw-r--r--src/ui.rs41
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()
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<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
}
}