Struct everscale_network::NetworkBuilder
source · pub struct NetworkBuilder<T, I>(_, _);Expand description
Convenient network layer builder
Implementations
sourceimpl NetworkBuilder<HNil, (Here, Here)>
impl NetworkBuilder<HNil, (Here, Here)>
sourcepub fn with_adnl<T>(
addr: T,
keystore: Keystore,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<Arc<Node>>, HNil>, (Here, Here)>where
T: ToSocketAddrs,
pub fn with_adnl<T>(
addr: T,
keystore: Keystore,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<Arc<Node>>, HNil>, (Here, Here)>where
T: ToSocketAddrs,
Creates a basic network layer that is an ADNL node
See with_adnl_ext if you need a node with a peer filter
Examples
use std::error::Error;
use everscale_network::{adnl, NetworkBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], 0)?
.build();
let options = adnl::NodeOptions::default();
let adnl = NetworkBuilder::with_adnl("127.0.0.1:10000", keystore, options).build()?;
Ok(())
}sourcepub fn with_adnl_ext<T>(
addr: T,
keystore: Keystore,
options: NodeOptions,
peer_filter: Arc<dyn PeerFilter>
) -> NetworkBuilder<HCons<Result<Arc<Node>>, HNil>, (Here, Here)>where
T: ToSocketAddrs,
pub fn with_adnl_ext<T>(
addr: T,
keystore: Keystore,
options: NodeOptions,
peer_filter: Arc<dyn PeerFilter>
) -> NetworkBuilder<HCons<Result<Arc<Node>>, HNil>, (Here, Here)>where
T: ToSocketAddrs,
Creates a basic network layer that is an ADNL node with additional filter
Examples
use std::error::Error;
use std::net::SocketAddrV4;
use std::sync::Arc;
use everscale_network::{adnl, NetworkBuilder};
struct MyFilter;
impl adnl::PeerFilter for MyFilter {
fn check(
&self,
ctx: adnl::NewPeerContext,
addr: SocketAddrV4,
peer_id: &adnl::NodeIdShort,
) -> bool {
// Allow only non-loopback IPs
!addr.ip().is_loopback()
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], 0)?
.build();
let options = adnl::NodeOptions::default();
let peer_filter = Arc::new(MyFilter);
let adnl = NetworkBuilder::with_adnl_ext("127.0.0.1:10000", keystore, options, peer_filter)
.build()?;
Ok(())
}sourceimpl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<Arc<Node>>, A>,
HCons<Result<(Arc<Node>, usize, NodeOptions)>, L>: IntoTuple2,
impl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<Arc<Node>>, A>,
HCons<Result<(Arc<Node>, usize, NodeOptions)>, L>: IntoTuple2,
sourcepub fn with_dht(
self,
key_tag: usize,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<(Arc<Node>, usize, NodeOptions)>, L>, (There<A>, There<R>)>
pub fn with_dht(
self,
key_tag: usize,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<(Arc<Node>, usize, NodeOptions)>, L>, (There<A>, There<R>)>
Creates DHT network layer
Examples
use std::error::Error;
use everscale_network::{adnl, dht, NetworkBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
const DHT_KEY_TAG: usize = 0;
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], DHT_KEY_TAG)?
.build();
let adnl_options = adnl::NodeOptions::default();
let dht_options = dht::NodeOptions::default();
let (adnl, dht) = NetworkBuilder::with_adnl("127.0.0.1:10000", keystore, adnl_options)
.with_dht(DHT_KEY_TAG, dht_options)
.build()?;
Ok(())
}sourceimpl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, R>,
HCons<Result<Arc<Node>>, L>: IntoTuple2,
impl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, R>,
HCons<Result<Arc<Node>>, L>: IntoTuple2,
sourcepub fn with_overlay(
self,
key_tag: usize
) -> NetworkBuilder<HCons<Result<Arc<Node>>, L>, (There<A>, There<R>)>
pub fn with_overlay(
self,
key_tag: usize
) -> NetworkBuilder<HCons<Result<Arc<Node>>, L>, (There<A>, There<R>)>
Creates overlay network layer.
NOTE: RLDP network layer must be present before calling this method.
Examples
use std::error::Error;
use everscale_network::{adnl, rldp, NetworkBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
const OVERLAY_KEY_TAG: usize = 0;
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], OVERLAY_KEY_TAG)?
.build();
let adnl_options = adnl::NodeOptions::default();
let rldp_options = rldp::NodeOptions::default();
let (adnl, rldp, overlay) =
NetworkBuilder::with_adnl("127.0.0.1:10000", keystore, adnl_options)
.with_rldp(rldp_options)
.with_overlay(OVERLAY_KEY_TAG)
.build()?;
Ok(())
}sourceimpl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<Arc<Node>>, A>,
HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>: IntoTuple2,
impl<L, A, R> NetworkBuilder<L, (A, R)>where
L: HList + Selector<Result<Arc<Node>>, A>,
HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>: IntoTuple2,
sourcepub fn with_rldp(
self,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>, (There<A>, Here)>
pub fn with_rldp(
self,
options: NodeOptions
) -> NetworkBuilder<HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>, (There<A>, Here)>
Creates RLDP network layer
See with_rldp_ext if you need an RLDP node with additional subscribers
Examples
use std::error::Error;
use everscale_network::{adnl, rldp, NetworkBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], 0)?
.build();
let adnl_options = adnl::NodeOptions::default();
let rldp_options = rldp::NodeOptions::default();
let (adnl, rldp) = NetworkBuilder::with_adnl("127.0.0.1:10000", keystore, adnl_options)
.with_rldp(rldp_options)
.build()?;
Ok(())
}sourcepub fn with_rldp_ext(
self,
options: NodeOptions,
subscribers: Vec<Arc<dyn QuerySubscriber>>
) -> NetworkBuilder<HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>, (There<A>, Here)>
pub fn with_rldp_ext(
self,
options: NodeOptions,
subscribers: Vec<Arc<dyn QuerySubscriber>>
) -> NetworkBuilder<HCons<Result<(Arc<Node>, Vec<Arc<dyn QuerySubscriber>>, NodeOptions)>, L>, (There<A>, Here)>
Creates RLDP network layer with additional RLDP query subscribers
Examples
use std::borrow::Cow;
use std::error::Error;
use std::sync::Arc;
use anyhow::Result;
use everscale_network::{
adnl, rldp, NetworkBuilder, QueryConsumingResult, QuerySubscriber, SubscriberContext,
};
struct LoggerSubscriber;
#[async_trait::async_trait]
impl QuerySubscriber for LoggerSubscriber {
async fn try_consume_query<'a>(
&self,
ctx: SubscriberContext<'a>,
constructor: u32,
query: Cow<'a, [u8]>,
) -> Result<QueryConsumingResult<'a>> {
println!("received {constructor}");
Ok(QueryConsumingResult::Rejected(query))
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let keystore = adnl::Keystore::builder()
.with_tagged_key([0; 32], 0)?
.build();
let adnl_options = adnl::NodeOptions::default();
let rldp_options = rldp::NodeOptions::default();
let subscriber = Arc::new(LoggerSubscriber);
let (adnl, rldp) = NetworkBuilder::with_adnl("127.0.0.1:10000", keystore, adnl_options)
.with_rldp_ext(rldp_options, vec![subscriber])
.build()?;
Ok(())
}sourceimpl<T, I> NetworkBuilder<T, I>where
T: DeferredInitializationList,
impl<T, I> NetworkBuilder<T, I>where
T: DeferredInitializationList,
Auto Trait Implementations
impl<T, I> RefUnwindSafe for NetworkBuilder<T, I>where
I: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, I> Send for NetworkBuilder<T, I>where
I: Send,
T: Send,
impl<T, I> Sync for NetworkBuilder<T, I>where
I: Sync,
T: Sync,
impl<T, I> Unpin for NetworkBuilder<T, I>where
I: Unpin,
T: Unpin,
impl<T, I> UnwindSafe for NetworkBuilder<T, I>where
I: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more