[][src]Trait libp2p::swarm::NetworkBehaviour

pub trait NetworkBehaviour {
    type ProtocolsHandler: IntoProtocolsHandler;
    type OutEvent;
    fn new_handler(&mut self) -> Self::ProtocolsHandler;
fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec<Multiaddr>;
fn inject_connected(&mut self, peer_id: PeerId, endpoint: ConnectedPoint);
fn inject_disconnected(
        &mut self,
        peer_id: &PeerId,
        endpoint: ConnectedPoint
    );
fn inject_node_event(
        &mut self,
        peer_id: PeerId,
        event: <<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::OutEvent
    );
fn poll<impl PollParameters>(
        &mut self,
        params: &mut impl PollParameters
    ) -> Async<NetworkBehaviourAction<<<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::InEvent, Self::OutEvent>>
    where
        impl PollParameters: PollParameters
; fn inject_replaced(
        &mut self,
        peer_id: PeerId,
        closed_endpoint: ConnectedPoint,
        new_endpoint: ConnectedPoint
    ) { ... }
fn inject_addr_reach_failure(
        &mut self,
        _peer_id: Option<&PeerId>,
        _addr: &Multiaddr,
        _error: &dyn Error
    ) { ... }
fn inject_dial_failure(&mut self, _peer_id: &PeerId) { ... }
fn inject_new_listen_addr(&mut self, _addr: &Multiaddr) { ... }
fn inject_expired_listen_addr(&mut self, _addr: &Multiaddr) { ... }
fn inject_new_external_addr(&mut self, _addr: &Multiaddr) { ... }
fn inject_listener_error(
        &mut self,
        _id: ListenerId,
        _err: &(dyn Error + 'static)
    ) { ... }
fn inject_listener_closed(&mut self, _id: ListenerId) { ... } }

A behaviour for the network. Allows customizing the swarm.

This trait has been designed to be composable. Multiple implementations can be combined into one that handles all the behaviours at once.

Associated Types

type ProtocolsHandler: IntoProtocolsHandler

Handler for all the protocols the network behaviour supports.

type OutEvent

Event generated by the NetworkBehaviour and that the swarm will report back.

Loading content...

Required methods

fn new_handler(&mut self) -> Self::ProtocolsHandler

Creates a new ProtocolsHandler for a connection with a peer.

Every time an incoming connection is opened, and every time we start dialing a node, this method is called.

The returned object is a handler for that specific connection, and will be moved to a background task dedicated to that connection.

The network behaviour (ie. the implementation of this trait) and the handlers it has spawned (ie. the objects returned by new_handler) can communicate by passing messages. Messages sent from the handler to the behaviour are injected with inject_node_event, and the behaviour can send a message to the handler by making poll return SendEvent.

fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec<Multiaddr>

Addresses that this behaviour is aware of for this specific peer, and that may allow reaching the peer.

The addresses will be tried in the order returned by this function, which means that they should be ordered by decreasing likelihood of reachability. In other words, the first address should be the most likely to be reachable.

fn inject_connected(&mut self, peer_id: PeerId, endpoint: ConnectedPoint)

Indicates the behaviour that we connected to the node with the given peer id through the given endpoint.

This node now has a handler (as spawned by new_handler) running in the background.

fn inject_disconnected(&mut self, peer_id: &PeerId, endpoint: ConnectedPoint)

Indicates the behaviour that we disconnected from the node with the given peer id. The endpoint is the one we used to be connected to.

There is no handler running anymore for this node. Any event that has been sent to it may or may not have been processed by the handler.

fn inject_node_event(
    &mut self,
    peer_id: PeerId,
    event: <<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::OutEvent
)

Informs the behaviour about an event generated by the handler dedicated to the peer identified by peer_id. for the behaviour.

The peer_id is guaranteed to be in a connected state. In other words, inject_connected has previously been called with this PeerId.

fn poll<impl PollParameters>(
    &mut self,
    params: &mut impl PollParameters
) -> Async<NetworkBehaviourAction<<<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::InEvent, Self::OutEvent>> where
    impl PollParameters: PollParameters

Polls for things that swarm should do.

This API mimics the API of the Stream trait. The method may register the current task in order to wake it up at a later point in time.

Loading content...

Provided methods

fn inject_replaced(
    &mut self,
    peer_id: PeerId,
    closed_endpoint: ConnectedPoint,
    new_endpoint: ConnectedPoint
)

Indicates the behaviour that we replace the connection from the node with another.

The handler that used to be dedicated to this node has been destroyed and replaced with a new one. Any event that has been sent to it may or may not have been processed.

The default implementation of this method calls inject_disconnected followed with inject_connected. This is a logically safe way to implement this behaviour. However, you may want to overwrite this method in the situations where this isn't appropriate.

fn inject_addr_reach_failure(
    &mut self,
    _peer_id: Option<&PeerId>,
    _addr: &Multiaddr,
    _error: &dyn Error
)

Indicates to the behaviour that we tried to reach an address, but failed.

If we were trying to reach a specific node, its ID is passed as parameter. If this is the last address to attempt for the given node, then inject_dial_failure is called afterwards.

fn inject_dial_failure(&mut self, _peer_id: &PeerId)

Indicates to the behaviour that we tried to dial all the addresses known for a node, but failed.

The peer_id is guaranteed to be in a disconnected state. In other words, inject_connected has not been called, or inject_disconnected has been called since then.

fn inject_new_listen_addr(&mut self, _addr: &Multiaddr)

Indicates to the behaviour that we have started listening on a new multiaddr.

fn inject_expired_listen_addr(&mut self, _addr: &Multiaddr)

Indicates to the behaviour that a new multiaddr we were listening on has expired, which means that we are no longer listening in it.

fn inject_new_external_addr(&mut self, _addr: &Multiaddr)

Indicates to the behaviour that we have discovered a new external address for us.

fn inject_listener_error(
    &mut self,
    _id: ListenerId,
    _err: &(dyn Error + 'static)
)

A listener experienced an error.

fn inject_listener_closed(&mut self, _id: ListenerId)

A listener closed.

Loading content...

Implementors

impl<TBehaviour> NetworkBehaviour for Toggle<TBehaviour> where
    TBehaviour: NetworkBehaviour
[src]

type ProtocolsHandler = ToggleIntoProtoHandler<<TBehaviour as NetworkBehaviour>::ProtocolsHandler>

type OutEvent = <TBehaviour as NetworkBehaviour>::OutEvent

impl<TSubstream> NetworkBehaviour for Floodsub<TSubstream> where
    TSubstream: AsyncRead + AsyncWrite
[src]

type ProtocolsHandler = OneShotHandler<TSubstream, FloodsubConfig, FloodsubRpc, InnerMessage>

type OutEvent = FloodsubEvent

impl<TSubstream> NetworkBehaviour for Identify<TSubstream> where
    TSubstream: AsyncRead + AsyncWrite
[src]

type ProtocolsHandler = ProtocolsHandlerSelect<IdentifyListenHandler<TSubstream>, PeriodicIdHandler<TSubstream>>

type OutEvent = IdentifyEvent

impl<TSubstream> NetworkBehaviour for Mdns<TSubstream> where
    TSubstream: AsyncRead + AsyncWrite
[src]

type ProtocolsHandler = DummyProtocolsHandler<TSubstream>

type OutEvent = MdnsEvent

impl<TSubstream> NetworkBehaviour for Ping<TSubstream> where
    TSubstream: AsyncRead + AsyncWrite
[src]

type ProtocolsHandler = PingHandler<TSubstream>

type OutEvent = PingEvent

impl<TSubstream, TStore> NetworkBehaviour for Kademlia<TSubstream, TStore> where
    TStore: RecordStore<'a>,
    TSubstream: AsyncRead + AsyncWrite
[src]

type ProtocolsHandler = KademliaHandler<TSubstream, QueryId>

type OutEvent = KademliaEvent

Loading content...