Skip to main content

Discovery

Trait Discovery 

Source
pub trait Discovery: Send + Sync {
    // Required methods
    fn start<'async_trait>(
        self: Arc<Self>,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait;
    fn shutdown<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn recv<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = DiscoveredPeer> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn on_event(&self, event: PeerConnectionEvent);
    fn find_peers_with(&self, item: &[u8]) -> Vec<DiscoveredPeer>;
}
Expand description

Trait that any discovery protocol must implement.

Discovery implementations find peers and yield them via recv(). The Node awaits recv() in a loop and handles connecting - discovery never connects directly.

Required Methods§

Source

fn start<'async_trait>( self: Arc<Self>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,

Start the discovery service. Listen endpoints, if needed by the implementation, must be provided at construction time.

Source

fn shutdown<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Shutdown the discovery service.

Source

fn recv<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = DiscoveredPeer> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Await the next discovered peer. The Node calls this in a loop; on shutdown the surrounding task is cancelled.

Source

fn on_event(&self, event: PeerConnectionEvent)

Receive a peer connection event from the Node.

Source

fn find_peers_with(&self, item: &[u8]) -> Vec<DiscoveredPeer>

Return peers in the routing table whose advertised bloom may contain item. Used by application layers (e.g. Swarm) to find candidates for protocol- or swarm-targeted dials. Implementations without a routing table may return an empty vector.

Implementors§