Enum ToSwarm
#[non_exhaustive]pub enum ToSwarm<TOutEvent, TInEvent> {
GenerateEvent(TOutEvent),
Dial {
opts: DialOpts,
},
ListenOn {
opts: ListenOpts,
},
RemoveListener {
id: ListenerId,
},
NotifyHandler {
peer_id: PeerId,
handler: NotifyHandler,
event: TInEvent,
},
NewExternalAddrCandidate(Multiaddr),
ExternalAddrConfirmed(Multiaddr),
ExternalAddrExpired(Multiaddr),
CloseConnection {
peer_id: PeerId,
connection: CloseConnection,
},
NewExternalAddrOfPeer {
peer_id: PeerId,
address: Multiaddr,
},
}
Expand description
A command issued from a NetworkBehaviour
for the Swarm
.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
GenerateEvent(TOutEvent)
Instructs the Swarm
to return an event when it is being polled.
Dial
Instructs the swarm to start a dial.
On success, NetworkBehaviour::on_swarm_event
with ConnectionEstablished
is invoked.
On failure, NetworkBehaviour::on_swarm_event
with DialFailure
is invoked.
DialOpts
provides access to the ConnectionId
via DialOpts::connection_id
.
This ConnectionId
will be used throughout the connection’s lifecycle to associate
events with it. This allows a NetworkBehaviour
to identify a connection that
resulted out of its own dial request.
ListenOn
Instructs the Swarm
to listen on the provided address.
Fields
opts: ListenOpts
RemoveListener
Instructs the Swarm
to remove the listener.
Fields
id: ListenerId
NotifyHandler
Instructs the Swarm
to send an event to the handler dedicated to a
connection with a peer.
If the Swarm
is connected to the peer, the message is delivered to the
ConnectionHandler
instance identified by the peer ID and connection ID.
If the specified connection no longer exists, the event is silently dropped.
Typically the connection ID given is the same as the one passed to
NetworkBehaviour::on_connection_handler_event
, i.e. whenever the behaviour wishes to
respond to a request on the same connection (and possibly the same
substream, as per the implementation of ConnectionHandler
).
Note that even if the peer is currently connected, connections can get closed at any time and thus the event may not reach a handler.
Fields
peer_id: PeerId
The peer for whom a ConnectionHandler
should be notified.
handler: NotifyHandler
The options w.r.t. which connection handler to notify of the event.
event: TInEvent
The event to send.
NewExternalAddrCandidate(Multiaddr)
Reports a new candidate for an external address to the Swarm
.
The emphasis on a new candidate is important. Protocols MUST take care to only emit a candidate once per “source”. For example, the observed address of a TCP connection does not change throughout its lifetime. Thus, only one candidate should be emitted per connection.
This makes the report frequency of an address a meaningful data-point for consumers of this
event. This address will be shared with all NetworkBehaviour
s via
FromSwarm::NewExternalAddrCandidate
.
This address could come from a variety of sources:
- A protocol such as identify obtained it from a remote.
- The user provided it based on configuration.
- We made an educated guess based on one of our listen addresses.
ExternalAddrConfirmed(Multiaddr)
Indicates to the Swarm
that the provided address is confirmed to be
externally reachable.
This is intended to be issued in response to a FromSwarm::NewExternalAddrCandidate
if
we are indeed externally reachable on this address. This address will be shared with
all NetworkBehaviour
s via FromSwarm::ExternalAddrConfirmed
.
ExternalAddrExpired(Multiaddr)
Indicates to the Swarm
that we are no longer externally reachable under
the provided address.
This expires an address that was earlier confirmed via ToSwarm::ExternalAddrConfirmed
.
This address will be shared with all NetworkBehaviour
s via
FromSwarm::ExternalAddrExpired
.
CloseConnection
Instructs the Swarm
to initiate a graceful close of one or all connections with the given
peer.
Closing a connection via ToSwarm::CloseConnection
will poll
ConnectionHandler::poll_close
to completion. In most cases, stopping to “use” a
connection is enough to have it closed. The keep-alive algorithm will close a
connection automatically once all ConnectionHandler
s are idle.
Use this command if you want to close a connection despite it still being in use by one or more handlers.
Fields
connection: CloseConnection
Whether to close a specific or all connections to the given peer.
NewExternalAddrOfPeer
Reports external address of a remote peer to the Swarm
and through that
to other NetworkBehaviour
s.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<TOutEvent, TInEvent> Freeze for ToSwarm<TOutEvent, TInEvent>
impl<TOutEvent, TInEvent> RefUnwindSafe for ToSwarm<TOutEvent, TInEvent>where
TOutEvent: RefUnwindSafe,
TInEvent: RefUnwindSafe,
impl<TOutEvent, TInEvent> Send for ToSwarm<TOutEvent, TInEvent>
impl<TOutEvent, TInEvent> Sync for ToSwarm<TOutEvent, TInEvent>
impl<TOutEvent, TInEvent> Unpin for ToSwarm<TOutEvent, TInEvent>
impl<TOutEvent, TInEvent> UnwindSafe for ToSwarm<TOutEvent, TInEvent>where
TOutEvent: UnwindSafe,
TInEvent: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more