Adds support for handling interface changes to mdns behaviour. (#1830)

* mdns: handle address changes.

* Update examples.

* Use async-io.

* Fix tokio-chat.

* Address review comments.

* Update if-watch.

* Poll interfaces correctly.

* Use socket2 and remove wasm-time.

* Update if-watch.

* Update versions and changelogs.

* Further changelog updates.

Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
Co-authored-by: Roman S. Borschel <roman@parity.io>
This commit is contained in:
David Craven
2020-12-03 13:30:52 +01:00
committed by GitHub
parent 4bdb61be0d
commit 505a17dfc2
13 changed files with 161 additions and 167 deletions

View File

@ -46,8 +46,7 @@ use libp2p::{
core::upgrade,
identity,
floodsub::{self, Floodsub, FloodsubEvent},
// `TokioMdns` is available through the `mdns-tokio` feature.
mdns::{TokioMdns, MdnsEvent},
mdns::{Mdns, MdnsEvent},
mplex,
noise,
swarm::{NetworkBehaviourEventProcess, SwarmBuilder},
@ -90,7 +89,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
#[derive(NetworkBehaviour)]
struct MyBehaviour {
floodsub: Floodsub,
mdns: TokioMdns,
mdns: Mdns,
}
impl NetworkBehaviourEventProcess<FloodsubEvent> for MyBehaviour {
@ -122,7 +121,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
// Create a Swarm to manage peers and events.
let mut swarm = {
let mdns = TokioMdns::new()?;
let mdns = Mdns::new().await?;
let mut behaviour = MyBehaviour {
floodsub: Floodsub::new(peer_id.clone()),
mdns,
@ -172,4 +171,4 @@ async fn main() -> Result<(), Box<dyn Error>> {
}
}
}
}
}

View File

@ -121,7 +121,7 @@ fn main() -> Result<(), Box<dyn Error>> {
// Create a Swarm to manage peers and events
let mut swarm = {
let mdns = Mdns::new()?;
let mdns = task::block_on(Mdns::new())?;
let mut behaviour = MyBehaviour {
floodsub: Floodsub::new(local_peer_id.clone()),
mdns,

View File

@ -151,7 +151,7 @@ fn main() -> Result<(), Box<dyn Error>> {
// Create a Kademlia behaviour.
let store = MemoryStore::new(local_peer_id.clone());
let kademlia = Kademlia::new(local_peer_id.clone(), store);
let mdns = Mdns::new()?;
let mdns = task::block_on(Mdns::new())?;
let behaviour = MyBehaviour { kademlia, mdns };
Swarm::new(transport, behaviour, local_peer_id)
};

View File

@ -26,7 +26,7 @@ fn main() -> Result<(), Box<dyn Error>> {
// This example provides passive discovery of the libp2p nodes on the
// network that send mDNS queries and answers.
task::block_on(async move {
let mut service = MdnsService::new()?;
let mut service = MdnsService::new().await?;
loop {
let (srv, packet) = service.next().await;
match packet {