net: add addr message subscription to seed protocol class

also add debug info to seed session
This commit is contained in:
lunar-mining
2022-06-24 11:56:26 +02:00
parent 9e07f7a216
commit 6fc73c2d2d
2 changed files with 20 additions and 13 deletions

View File

@@ -7,7 +7,9 @@ use smol::Executor;
use crate::Result;
use super::{
super::{message, ChannelPtr, HostsPtr, P2pPtr, SettingsPtr},
super::{
message, message_subscriber::MessageSubscription, ChannelPtr, HostsPtr, P2pPtr, SettingsPtr,
},
ProtocolBase, ProtocolBasePtr,
};
@@ -16,6 +18,7 @@ pub struct ProtocolSeed {
channel: ChannelPtr,
hosts: HostsPtr,
settings: SettingsPtr,
addr_sub: MessageSubscription<message::AddrsMessage>,
}
impl ProtocolSeed {
@@ -24,7 +27,14 @@ impl ProtocolSeed {
let hosts = p2p.hosts();
let settings = p2p.settings();
Arc::new(Self { channel, hosts, settings })
//// Create a subscription to address message.
let addr_sub = channel
.clone()
.subscribe_msg::<message::AddrsMessage>()
.await
.expect("Missing addr dispatcher!");
Arc::new(Self { channel, hosts, settings, addr_sub })
}
/// Sends own external address over a channel. Imports own external address
@@ -50,13 +60,6 @@ impl ProtocolBase for ProtocolSeed {
/// message and receives an address message.
async fn start(self: Arc<Self>, _executor: Arc<Executor<'_>>) -> Result<()> {
debug!(target: "net", "ProtocolSeed::start() [START]");
// Create a subscription to address message.
let addr_sub = self
.channel
.clone()
.subscribe_msg::<message::AddrsMessage>()
.await
.expect("Missing addrs dispatcher!");
// Send own address to the seed server.
self.send_self_address().await?;
@@ -66,7 +69,7 @@ impl ProtocolBase for ProtocolSeed {
self.channel.clone().send(get_addr).await?;
// Receive addresses.
let addrs_msg = addr_sub.receive().await?;
let addrs_msg = self.addr_sub.receive().await?;
debug!(target: "net", "ProtocolSeed::start() received {} addrs", addrs_msg.addrs.len());
self.hosts.store(addrs_msg.addrs.clone()).await;

View File

@@ -105,16 +105,20 @@ impl SeedSession {
info!("Connected seed #{} [{}]", seed_index, seed);
self.clone().register_channel(channel.clone(), executor.clone()).await?;
if let Err(err) =
self.clone().register_channel(channel.clone(), executor.clone()).await
{
warn!("Failure during seed session #{} [{}]: {}", seed_index, seed, err);
}
debug!("Disconnecting from seed #{} [{}]", seed_index, seed);
info!("Disconnecting from seed #{} [{}]", seed_index, seed);
channel.stop().await;
debug!(target: "net", "SeedSession::start_seed(i={}) [END]", seed_index);
Ok(())
}
Err(err) => {
info!("Failure contacting seed #{} [{}]: {}", seed_index, seed, err);
warn!("Failure contacting seed #{} [{}]: {}", seed_index, seed, err);
Err(err)
}
}