1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use crate::NetworkError;
use parking_lot::RwLock;
use std::{
net::SocketAddr,
time::Duration,
{self},
};
pub struct Config {
pub desired_address: SocketAddr,
minimum_number_of_connected_peers: u16,
maximum_number_of_connected_peers: u16,
pub bootnodes: RwLock<Vec<SocketAddr>>,
is_bootnode: bool,
peer_sync_interval: Duration,
}
impl Config {
#[allow(clippy::too_many_arguments)]
pub fn new(
desired_address: SocketAddr,
minimum_number_of_connected_peers: u16,
maximum_number_of_connected_peers: u16,
bootnodes_addresses: Vec<String>,
is_bootnode: bool,
peer_sync_interval: Duration,
) -> Result<Self, NetworkError> {
let mut bootnodes = Vec::with_capacity(bootnodes_addresses.len());
for bootnode_address in bootnodes_addresses.iter() {
if let Ok(bootnode) = bootnode_address.parse::<SocketAddr>() {
bootnodes.push(bootnode);
}
}
Ok(Self {
desired_address,
minimum_number_of_connected_peers,
maximum_number_of_connected_peers,
bootnodes: RwLock::new(bootnodes),
is_bootnode,
peer_sync_interval,
})
}
#[inline]
pub fn bootnodes(&self) -> Vec<SocketAddr> {
self.bootnodes.read().clone()
}
#[inline]
pub fn is_bootnode(&self) -> bool {
self.is_bootnode
}
#[inline]
pub fn minimum_number_of_connected_peers(&self) -> u16 {
self.minimum_number_of_connected_peers
}
#[inline]
pub fn maximum_number_of_connected_peers(&self) -> u16 {
self.maximum_number_of_connected_peers
}
pub fn peer_sync_interval(&self) -> Duration {
self.peer_sync_interval
}
}