summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-10-21 23:34:48 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-10-21 23:34:48 +0800
commitf7c278d77e8b4e63b63ef6976b4b22abef060cda (patch)
tree26184c1f81c3fee073adc6b67de8d85c04d93750
parent3d0251cea297fefe7b87f3a50824e3eebc5337b7 (diff)
feat(cmd): list peers
-rw-r--r--src/network.rs28
-rw-r--r--src/ui.rs12
2 files changed, 38 insertions, 2 deletions
diff --git a/src/network.rs b/src/network.rs
index 1708d2e..3f3a370 100644
--- a/src/network.rs
+++ b/src/network.rs
@@ -1,3 +1,5 @@
+use std::fmt::{Debug, Display, Pointer};
+use std::net::SocketAddr;
use std::sync::{Arc, Weak};
use serde::{Deserialize, Serialize};
@@ -36,7 +38,7 @@ pub struct Network {
me: Client,
listener: Arc<TcpListener>,
- peers: Vec<Arc<Mutex<Peer>>>,
+ pub peers: Vec<Arc<Mutex<Peer>>>,
blockchain: Arc<Mutex<BlockChain>>,
config: NetworkConfig,
@@ -192,13 +194,34 @@ impl Network {
}
}
-struct Peer {
+pub struct Peer {
parent: Weak<Mutex<Network>>,
sink: Arc<Mutex<SplitSink<Framed<TokioFramed<TcpStream, LengthDelimitedCodec>, Request, Request, Json<Request, Request>>, Request>>>,
+ addr: SocketAddr,
+}
+
+impl Display for Peer {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(
+ f,
+ "Peer Ip: {}",
+ self.addr
+ .ip()
+ )
+ }
+}
+
+impl Debug for Peer {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ Display::fmt(&self, f)
+ }
}
impl Peer {
fn new(parent: Weak<Mutex<Network>>, stream: TcpStream) -> Self {
+ let addr = stream
+ .peer_addr()
+ .unwrap();
let framed = Framed::new(TokioFramed::new(stream, LengthDelimitedCodec::new()), Json::default());
let (sink, stream) = framed.split();
let sink = Arc::new(Mutex::new(sink));
@@ -209,6 +232,7 @@ impl Peer {
Self {
parent,
sink,
+ addr,
}
}
diff --git a/src/ui.rs b/src/ui.rs
index df181f5..6dadf39 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -74,6 +74,18 @@ impl Ui {
)
.await;
}
+
+ if cmd[1] == "list" {
+ println!(
+ "{:#?}",
+ self.network
+ .upgrade()
+ .unwrap()
+ .lock()
+ .await
+ .peers
+ );
+ }
}
if cmd[0] == "fetch" {