Add Ping protocol to lighthouse

This commit is contained in:
Age Manning 2019-03-21 13:42:02 +11:00
parent 7f976124df
commit 84f0ad2ae7
No known key found for this signature in database
GPG Key ID: 05EED64B79E06A93

View File

@ -8,6 +8,7 @@ use libp2p::{
}, },
gossipsub::{Gossipsub, GossipsubEvent}, gossipsub::{Gossipsub, GossipsubEvent},
identify::{protocol::IdentifyInfo, Identify, IdentifyEvent}, identify::{protocol::IdentifyInfo, Identify, IdentifyEvent},
ping::{Ping, PingEvent},
tokio_io::{AsyncRead, AsyncWrite}, tokio_io::{AsyncRead, AsyncWrite},
NetworkBehaviour, PeerId, NetworkBehaviour, PeerId,
}; };
@ -26,10 +27,14 @@ pub struct Behaviour<TSubstream: AsyncRead + AsyncWrite> {
serenity_rpc: Rpc<TSubstream>, serenity_rpc: Rpc<TSubstream>,
/// Allows discovery of IP addresses for peers on the network. /// Allows discovery of IP addresses for peers on the network.
identify: Identify<TSubstream>, identify: Identify<TSubstream>,
/// Keep regular connection to peers and disconnect if absent.
// TODO: Keepalive, likely remove this later.
// TODO: Make the ping time customizeable.
ping: Ping<TSubstream>,
#[behaviour(ignore)] #[behaviour(ignore)]
events: Vec<BehaviourEvent>, events: Vec<BehaviourEvent>,
#[behaviour(ignore)]
/// Logger for behaviour actions. /// Logger for behaviour actions.
#[behaviour(ignore)]
log: slog::Logger, log: slog::Logger,
} }
@ -88,6 +93,14 @@ impl<TSubstream: AsyncRead + AsyncWrite> NetworkBehaviourEventProcess<IdentifyEv
} }
} }
impl<TSubstream: AsyncRead + AsyncWrite> NetworkBehaviourEventProcess<PingEvent>
for Behaviour<TSubstream>
{
fn inject_event(&mut self, _event: PingEvent) {
// not interested in ping responses at the moment.
}
}
impl<TSubstream: AsyncRead + AsyncWrite> Behaviour<TSubstream> { impl<TSubstream: AsyncRead + AsyncWrite> Behaviour<TSubstream> {
pub fn new(local_public_key: PublicKey, net_conf: &NetworkConfig, log: &slog::Logger) -> Self { pub fn new(local_public_key: PublicKey, net_conf: &NetworkConfig, log: &slog::Logger) -> Self {
let local_peer_id = local_public_key.clone().into_peer_id(); let local_peer_id = local_public_key.clone().into_peer_id();
@ -102,6 +115,7 @@ impl<TSubstream: AsyncRead + AsyncWrite> Behaviour<TSubstream> {
identify_config.user_agent, identify_config.user_agent,
local_public_key, local_public_key,
), ),
ping: Ping::new(),
events: Vec::new(), events: Vec::new(),
log: behaviour_log, log: behaviour_log,
} }