Struct tetsy_libp2p_mdns::service::MdnsService [−][src]
A running service that discovers tetsy-libp2p peers and responds to other tetsy-libp2p peers’ queries on the local network.
Usage
In order to use mDNS to discover peers on the local network, use the MdnsService
. This is
done by creating a MdnsService
then polling it in the same way as you would poll a stream.
Polling the MdnsService
can produce either an MdnsQuery
, corresponding to an mDNS query
received by another node on the local network, or an MdnsResponse
corresponding to a response
to a query previously emitted locally. The MdnsService
will automatically produce queries,
which means that you will receive responses automatically.
When you receive an MdnsQuery
, use the respond
method to send back an answer to the node
that emitted the query.
When you receive an MdnsResponse
, use the provided methods to query the information received
in the response.
Example
let _future_to_poll = async { let (mut service, packet) = service.next().await; match packet { MdnsPacket::Query(query) => { println!("Query from {:?}", query.remote_addr()); let packets = build_query_response( query.query_id(), my_peer_id.clone(), vec![].into_iter(), Duration::from_secs(120), ); for packet in packets { service.enqueue_response(packet); } } MdnsPacket::Response(response) => { for peer in response.discovered_peers() { println!("Discovered peer {:?}", peer.id()); for addr in peer.addresses() { println!("Address = {:?}", addr); } } } MdnsPacket::ServiceDiscovery(disc) => { let resp = build_service_discovery_response( disc.query_id(), Duration::from_secs(120), ); service.enqueue_response(resp); } } };
Implementations
impl MdnsService
[src]
pub async fn new() -> Result<Self>
[src]
Starts a new mDNS service.
pub async fn silent() -> Result<Self>
[src]
Same as new
, but we don’t automatically send queries on the network.
pub fn enqueue_response(&mut self, rsp: Vec<u8>)
[src]
pub async fn next(self) -> (Self, MdnsPacket)
[src]
Returns a future resolving to itself and the next received MdnsPacket
.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for MdnsService
impl Send for MdnsService
impl Sync for MdnsService
impl Unpin for MdnsService
impl UnwindSafe for MdnsService
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,