From f7c278d77e8b4e63b63ef6976b4b22abef060cda Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 21 Oct 2025 23:34:48 +0800 Subject: feat(cmd): list peers --- src/network.rs | 28 ++++++++++++++++++++++++++-- src/ui.rs | 12 ++++++++++++ 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, - peers: Vec>>, + pub peers: Vec>>, blockchain: Arc>, config: NetworkConfig, @@ -192,13 +194,34 @@ impl Network { } } -struct Peer { +pub struct Peer { parent: Weak>, sink: Arc, Request, Request, Json>, 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>, 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" { -- cgit v1.2.3