pub struct P2p {
executor: ExecutorPtr,
hosts: HostsPtr,
protocol_registry: ProtocolRegistry,
settings: Arc<RwLock<Settings>>,
session_manual: ManualSessionPtr,
session_inbound: InboundSessionPtr,
session_outbound: OutboundSessionPtr,
session_refine: RefineSessionPtr,
session_seedsync: SeedSyncSessionPtr,
session_direct: DirectSessionPtr,
pub dnet_enabled: AtomicBool,
dnet_publisher: PublisherPtr<DnetEvent>,
}Expand description
Toplevel peer-to-peer networking interface
Fields§
§executor: ExecutorPtrGlobal multithreaded executor reference
hosts: HostsPtrKnown hosts (peers)
protocol_registry: ProtocolRegistryProtocol registry
settings: Arc<RwLock<Settings>>P2P network settings
session_manual: ManualSessionPtrReference to configured ManualSession
session_inbound: InboundSessionPtrReference to configured InboundSession
session_outbound: OutboundSessionPtrReference to configured OutboundSession
session_refine: RefineSessionPtrReference to configured RefineSession
session_seedsync: SeedSyncSessionPtrReference to configured SeedSyncSession
session_direct: DirectSessionPtrReference to configured DirectSession
dnet_enabled: AtomicBoolEnable network debugging
dnet_publisher: PublisherPtr<DnetEvent>The publisher for which we can give dnet info over
Implementations§
Source§impl P2p
impl P2p
Sourcepub async fn new(settings: Settings, executor: ExecutorPtr) -> Result<P2pPtr>
pub async fn new(settings: Settings, executor: ExecutorPtr) -> Result<P2pPtr>
Initialize a new p2p network.
Initializes all sessions and protocols. Adds the protocols to the protocol registry, along with a bitflag session selector that includes or excludes sessions from seed, version, and address protocols.
Creates a weak pointer to self that is used by all sessions to access the p2p parent class.
Sourcepub async fn start(self: Arc<Self>) -> Result<()>
pub async fn start(self: Arc<Self>) -> Result<()>
Starts inbound, outbound, and manual sessions.
Sourcepub async fn broadcast<M: Message>(&self, message: &M)
pub async fn broadcast<M: Message>(&self, message: &M)
Broadcasts a message concurrently across all active peers.
Sourcepub async fn broadcast_with_exclude<M: Message>(
&self,
message: &M,
exclude_list: &[Url],
)
pub async fn broadcast_with_exclude<M: Message>( &self, message: &M, exclude_list: &[Url], )
Broadcasts a message concurrently across active peers, excluding
the ones provided in exclude_list.
Sourcepub async fn broadcast_to<M: Message>(
&self,
message: &M,
channel_list: &[ChannelPtr],
)
pub async fn broadcast_to<M: Message>( &self, message: &M, channel_list: &[ChannelPtr], )
Broadcast a message concurrently to all given peers.
Sourcepub fn is_connected(&self) -> bool
pub fn is_connected(&self) -> bool
Check whether this node has connections to any peers. This method will not report seedsync or refinery connections.
Sourcepub fn peers_count(&self) -> usize
pub fn peers_count(&self) -> usize
The number of connected peers. This means channels which are not seed or refine.
Sourcepub fn settings(&self) -> Arc<AsyncRwLock<Settings>>
pub fn settings(&self) -> Arc<AsyncRwLock<Settings>>
Return an atomic pointer to the set network settings
Sourcepub async fn reload(self: Arc<Self>)
pub async fn reload(self: Arc<Self>)
Reload settings and apply any changes to the running P2P subsystem.
Users should modify settings through the settings lock, then call this method to apply the changes:
let mut settings = p2p.settings().write().await;
settings.outbound_connections = new_value;
drop(settings);
p2p.reload().await;Sourcepub fn executor(&self) -> ExecutorPtr
pub fn executor(&self) -> ExecutorPtr
Reference the global executor
Sourcepub fn protocol_registry(&self) -> &ProtocolRegistry
pub fn protocol_registry(&self) -> &ProtocolRegistry
Return a reference to the internal protocol registry
Sourcepub fn session_manual(&self) -> ManualSessionPtr
pub fn session_manual(&self) -> ManualSessionPtr
Get pointer to manual session
Sourcepub fn session_inbound(&self) -> InboundSessionPtr
pub fn session_inbound(&self) -> InboundSessionPtr
Get pointer to inbound session
Sourcepub fn session_outbound(&self) -> OutboundSessionPtr
pub fn session_outbound(&self) -> OutboundSessionPtr
Get pointer to outbound session
Sourcepub fn session_refine(&self) -> RefineSessionPtr
pub fn session_refine(&self) -> RefineSessionPtr
Get pointer to refine session
Sourcepub fn session_seedsync(&self) -> SeedSyncSessionPtr
pub fn session_seedsync(&self) -> SeedSyncSessionPtr
Get pointer to seedsync session
Sourcepub fn session_direct(&self) -> DirectSessionPtr
pub fn session_direct(&self) -> DirectSessionPtr
Get pointer to direct session
Sourcepub fn dnet_enable(&self)
pub fn dnet_enable(&self)
Enable network debugging
Sourcepub fn dnet_disable(&self)
pub fn dnet_disable(&self)
Disable network debugging
Sourcepub async fn dnet_subscribe(&self) -> Subscription<DnetEvent>
pub async fn dnet_subscribe(&self) -> Subscription<DnetEvent>
Subscribe to dnet events
Sourcepub(super) async fn dnet_notify(&self, event: DnetEvent)
pub(super) async fn dnet_notify(&self, event: DnetEvent)
Send a dnet notification over the publisher
Sourcepub fn get_channel(&self, id: u32) -> Option<ChannelPtr>
pub fn get_channel(&self, id: u32) -> Option<ChannelPtr>
Grab the channel pointer of provided channel ID, if it exists.
Auto Trait Implementations§
impl !Freeze for P2p
impl !RefUnwindSafe for P2p
impl Send for P2p
impl Sync for P2p
impl Unpin for P2p
impl !UnwindSafe for P2p
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§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,
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> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.