diff --git a/examples/listener.rs b/examples/listener.rs index 6b1e704..5be65a1 100644 --- a/examples/listener.rs +++ b/examples/listener.rs @@ -9,7 +9,7 @@ use electrs::notify; fn main() { let _ = Config::from_args(); let rx = notify::run().into_receiver(); - for msg in rx.iter() { - info!("{:?}", msg) + for blockhash in rx.iter() { + info!("{:?}", blockhash.be_hex_string()) } } diff --git a/src/notify.rs b/src/notify.rs index d230e61..804a653 100644 --- a/src/notify.rs +++ b/src/notify.rs @@ -1,10 +1,12 @@ use bitcoin::network::constants::Network; use bitcoin::network::message::NetworkMessage; +use bitcoin::network::message_blockdata::InvType; use bitcoin::network::socket::Socket; +use bitcoin::util::hash::Sha256dHash; use util; -pub fn run() -> util::Channel { +pub fn run() -> util::Channel { let chan = util::Channel::new(); let tx = chan.sender(); @@ -32,17 +34,19 @@ pub fn run() -> util::Channel { break; } }; + debug!("recv {:?}", msg); match msg { NetworkMessage::Alert(_) => continue, // deprecated NetworkMessage::Version(_) => outgoing.push(NetworkMessage::Verack), NetworkMessage::Ping(nonce) => outgoing.push(NetworkMessage::Pong(nonce)), + NetworkMessage::Inv(ref inventory) => { + inventory + .iter() + .filter(|inv| inv.inv_type == InvType::Block) + .for_each(|inv| tx.send(inv.hash).expect("failed to send message")); + } _ => (), }; - debug!("recv {:?}", msg); - if tx.send(msg).is_err() { - warn!("failed to connect to node"); - return; - } } });