pub struct RefreshService {
table: Arc<RoutingTable>,
listen_endpoint: RwLock<Option<Endpoint>>,
task_group: TaskGroup,
config: Arc<Config>,
monitor: Arc<Monitor>,
}
Fields§
§table: Arc<RoutingTable>
Routing table
listen_endpoint: RwLock<Option<Endpoint>>
Resolved listen endpoint
task_group: TaskGroup
Managing spawned tasks.
config: Arc<Config>
Holds the configuration for the P2P network.
monitor: Arc<Monitor>
Responsible for network and system monitoring.
Implementations§
Source§impl RefreshService
impl RefreshService
Sourcepub fn new(
config: Arc<Config>,
table: Arc<RoutingTable>,
monitor: Arc<Monitor>,
executor: Executor,
) -> Self
pub fn new( config: Arc<Config>, table: Arc<RoutingTable>, monitor: Arc<Monitor>, executor: Executor, ) -> Self
Creates a new refresh service
Sourcepub fn set_listen_endpoint(&self, resolved_endpoint: &Endpoint) -> Result<()>
pub fn set_listen_endpoint(&self, resolved_endpoint: &Endpoint) -> Result<()>
Set the resolved listen endpoint.
Sourceasync fn refresh_loop(self: Arc<Self>) -> Result<()>
async fn refresh_loop(self: Arc<Self>) -> Result<()>
Initiates periodic refreshing of the routing table. This function will selects the first 8 entries (oldest entries) from each bucket in the routing table and starts sending Ping messages to the collected entries.
Sourceasync fn do_refresh(self: Arc<Self>, entries: &[BucketEntry])
async fn do_refresh(self: Arc<Self>, entries: &[BucketEntry])
Iterates over the entries and initiates a connection.
Sourceasync fn refresh_entry(self: Arc<Self>, bucket_entry: BucketEntry)
async fn refresh_entry(self: Arc<Self>, bucket_entry: BucketEntry)
Initiates refresh for a specific entry within the routing table. It updates the routing table according to the result.
Sourceasync fn connect(&self, entry: &Entry) -> Result<()>
async fn connect(&self, entry: &Entry) -> Result<()>
Initiates a UDP connection with the entry and attempts to send a Ping message. If it fails, it retries according to the allowed retries specified in the Config, with backoff between each retry.
Sourceasync fn listen_loop(self: Arc<Self>, endpoint: Endpoint) -> Result<()>
async fn listen_loop(self: Arc<Self>, endpoint: Endpoint) -> Result<()>
Set up a UDP listener and start listening for Ping messages from other peers.
Sourceasync fn listen_to_ping_msg(
&self,
conn: &UdpConn<RefreshMsgCodec>,
) -> Result<()>
async fn listen_to_ping_msg( &self, conn: &UdpConn<RefreshMsgCodec>, ) -> Result<()>
Listen to receive a Ping message and respond with a Pong message.
Sourceasync fn send_ping_msg(
&self,
conn: &UdpConn<RefreshMsgCodec>,
endpoint: &Endpoint,
) -> Result<()>
async fn send_ping_msg( &self, conn: &UdpConn<RefreshMsgCodec>, endpoint: &Endpoint, ) -> Result<()>
Sends a Ping msg and wait to receive the Pong message.