Struct communication::behaviour::P2PNetworkBehaviour [−][src]
pub struct P2PNetworkBehaviour<Req: MessageEvent, Res: MessageEvent> { /* fields omitted */ }
The P2PNetworkBehaviour
determines the behaviour of the p2p-network.
It combines the following protocols from libp2p
- mDNS for peer discovery within the local network
- identify-protocol to receive identifying information of the remote peer
- RequestResponse Protocol for sending generic request
Req
and responseRes
messages
The P2PNetworkBehaviour itself is only effective if a new [ExpandedSwarm
] is created for it, this
swarm is the entry point for all communication to remote peers, and contains the current state.
The P2PNetworkBehaviour
implements a custom poll method that creates P2PEvent
s from the events of the
different protocols, it can be polled with the next()
or next_event()
methods of the [ExpandedSwarm
].
Implementations
impl<Req: MessageEvent, Res: MessageEvent> P2PNetworkBehaviour<Req, Res>
[src]
pub async fn init_swarm(
local_keys: Keypair,
config: BehaviourConfig
) -> Result<Swarm<P2PNetworkBehaviour<Req, Res>>, BehaviourError>
[src]
local_keys: Keypair,
config: BehaviourConfig
) -> Result<Swarm<P2PNetworkBehaviour<Req, Res>>, BehaviourError>
Creates a new P2PNetworkBehaviour
and returns the swarm for it.
The returned Swarm<P2PNetworkBehaviour>
is the entry point for all communication with
remote peers, i.g. to send requests and responses.
Additionally to the methods of the P2PNetworkBehaviour
there is a range of [libp2p::ExpandedSwarm
]
functions that can be used for swarm interaction like dialing a new peer.
Example
use async_std::task; use communication::behaviour::{BehaviourConfig, P2PNetworkBehaviour}; use libp2p::identity::Keypair; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub enum Request { Ping, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum Response { Pong, } let local_keys = Keypair::generate_ed25519(); let config = BehaviourConfig::default(); let mut swarm = task::block_on(P2PNetworkBehaviour::<Request, Response>::init_swarm(local_keys, config)) .expect("Init swarm failed.");
pub fn add_peer_addr(&mut self, peer_id: PeerId, addr: Multiaddr)
[src]
pub fn remove_peer_addr(&mut self, peer_id: &PeerId, addr: &Multiaddr)
[src]
pub fn remove_peer(&mut self, peer_id: &PeerId) -> Option<Vec<Multiaddr>>
[src]
pub fn get_peer_addr(&self, peer_id: &PeerId) -> Option<&Vec<Multiaddr>>
[src]
pub fn get_all_peers(&self) -> Vec<&PeerId>
[src]
pub fn get_active_mdns_peers(&mut self) -> Vec<&PeerId>
[src]
Get the peers discovered by mdns
pub fn send_request(&mut self, peer_id: &PeerId, request: Req) -> RequestId
[src]
pub fn send_response(
&mut self,
request_id: &RequestId,
response: Res
) -> Result<(), Res>
[src]
&mut self,
request_id: &RequestId,
response: Res
) -> Result<(), Res>
Trait Implementations
impl<Req: MessageEvent, Res: MessageEvent> NetworkBehaviour for P2PNetworkBehaviour<Req, Res> where
Mdns: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Mdns as NetworkBehaviour>::OutEvent>,
Identify: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Identify as NetworkBehaviour>::OutEvent>,
RequestResponse<MessageCodec<Req, Res>>: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<RequestResponse<MessageCodec<Req, Res>> as NetworkBehaviour>::OutEvent>,
Relay: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Relay as NetworkBehaviour>::OutEvent>,
[src]
Mdns: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Mdns as NetworkBehaviour>::OutEvent>,
Identify: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Identify as NetworkBehaviour>::OutEvent>,
RequestResponse<MessageCodec<Req, Res>>: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<RequestResponse<MessageCodec<Req, Res>> as NetworkBehaviour>::OutEvent>,
Relay: NetworkBehaviour,
Self: NetworkBehaviourEventProcess<<Relay as NetworkBehaviour>::OutEvent>,
type ProtocolsHandler = IntoProtocolsHandlerSelect<IntoProtocolsHandlerSelect<IntoProtocolsHandlerSelect<<Mdns as NetworkBehaviour>::ProtocolsHandler, <Identify as NetworkBehaviour>::ProtocolsHandler>, <RequestResponse<MessageCodec<Req, Res>> as NetworkBehaviour>::ProtocolsHandler>, <Relay as NetworkBehaviour>::ProtocolsHandler>
Handler for all the protocols the network behaviour supports.
type OutEvent = P2PEvent<Req, Res>
Event generated by the NetworkBehaviour
and that the swarm will report back.
fn new_handler(&mut self) -> Self::ProtocolsHandler
[src]
fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec<Multiaddr>
[src]
fn inject_connected(&mut self, peer_id: &PeerId)
[src]
fn inject_disconnected(&mut self, peer_id: &PeerId)
[src]
fn inject_connection_established(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint
)
[src]
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint
)
fn inject_address_change(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
old: &ConnectedPoint,
new: &ConnectedPoint
)
[src]
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
old: &ConnectedPoint,
new: &ConnectedPoint
)
fn inject_connection_closed(
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint
)
[src]
&mut self,
peer_id: &PeerId,
connection_id: &ConnectionId,
endpoint: &ConnectedPoint
)
fn inject_addr_reach_failure(
&mut self,
peer_id: Option<&PeerId>,
addr: &Multiaddr,
error: &dyn Error
)
[src]
&mut self,
peer_id: Option<&PeerId>,
addr: &Multiaddr,
error: &dyn Error
)
fn inject_dial_failure(&mut self, peer_id: &PeerId)
[src]
fn inject_new_listener(&mut self, id: ListenerId)
[src]
fn inject_new_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
[src]
fn inject_expired_listen_addr(&mut self, id: ListenerId, addr: &Multiaddr)
[src]
fn inject_new_external_addr(&mut self, addr: &Multiaddr)
[src]
fn inject_expired_external_addr(&mut self, addr: &Multiaddr)
[src]
fn inject_listener_error(&mut self, id: ListenerId, err: &(dyn Error + 'static))
[src]
fn inject_listener_closed(&mut self, id: ListenerId, reason: Result<(), &Error>)
[src]
fn inject_event(
&mut self,
peer_id: PeerId,
connection_id: ConnectionId,
event: <<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::OutEvent
)
[src]
&mut self,
peer_id: PeerId,
connection_id: ConnectionId,
event: <<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::OutEvent
)
fn poll(
&mut self,
cx: &mut Context<'_>,
poll_params: &mut impl PollParameters
) -> Poll<NetworkBehaviourAction<<<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::InEvent, Self::OutEvent>>
[src]
&mut self,
cx: &mut Context<'_>,
poll_params: &mut impl PollParameters
) -> Poll<NetworkBehaviourAction<<<Self::ProtocolsHandler as IntoProtocolsHandler>::Handler as ProtocolsHandler>::InEvent, Self::OutEvent>>
impl<Req: MessageEvent, Res: MessageEvent> NetworkBehaviourEventProcess<()> for P2PNetworkBehaviour<Req, Res>
[src]
fn inject_event(&mut self, _: ())
[src]
impl<Req: MessageEvent, Res: MessageEvent> NetworkBehaviourEventProcess<IdentifyEvent> for P2PNetworkBehaviour<Req, Res>
[src]
fn inject_event(&mut self, event: IdentifyEvent)
[src]
impl<Req: MessageEvent, Res: MessageEvent> NetworkBehaviourEventProcess<MdnsEvent> for P2PNetworkBehaviour<Req, Res>
[src]
fn inject_event(&mut self, event: MdnsEvent)
[src]
impl<Req: MessageEvent, Res: MessageEvent> NetworkBehaviourEventProcess<RequestResponseEvent<Req, Res, Res>> for P2PNetworkBehaviour<Req, Res>
[src]
fn inject_event(&mut self, event: RequestResponseEvent<Req, Res>)
[src]
Auto Trait Implementations
impl<Req, Res> !RefUnwindSafe for P2PNetworkBehaviour<Req, Res>
impl<Req, Res> Send for P2PNetworkBehaviour<Req, Res>
impl<Req, Res> !Sync for P2PNetworkBehaviour<Req, Res>
impl<Req, Res> Unpin for P2PNetworkBehaviour<Req, Res> where
Req: Unpin,
Res: Unpin,
Req: Unpin,
Res: Unpin,
impl<Req, Res> !UnwindSafe for P2PNetworkBehaviour<Req, Res>
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>,