scatter_net/legacy/net/methods/
init_peer_groups.rs1use anyhow::Result;
2
3use crate::{PeerGroup, PeerGroupConfig, ScatterNet};
4
5impl ScatterNet {
6 pub fn init_peer_groups(&self, mut configs: Vec<PeerGroupConfig>) -> Result<()> {
7 if !configs.iter().any(|peer_group| peer_group.open) {
8 configs.extend_from_slice(&[
9 PeerGroupConfig {
10 members: vec![],
11 name: "instant".to_string(),
12 open: true,
13 rtt_cap_ms: 4,
14 },
15 PeerGroupConfig {
16 members: vec![],
17 name: "local".to_string(),
18 open: true,
19 rtt_cap_ms: 16,
20 },
21 PeerGroupConfig {
22 members: vec![],
23 name: "near".to_string(),
24 open: true,
25 rtt_cap_ms: 64,
26 },
27 PeerGroupConfig {
28 members: vec![],
29 name: "midrange".to_string(),
30 open: true,
31 rtt_cap_ms: 256,
32 },
33 PeerGroupConfig {
34 members: vec![],
35 name: "distant".to_string(),
36 open: true,
37 rtt_cap_ms: 1024,
38 },
39 PeerGroupConfig {
40 members: vec![],
41 name: "far".to_string(),
42 open: true,
43 rtt_cap_ms: 4096,
44 },
45 PeerGroupConfig {
46 members: vec![],
47 name: "interplanetary".to_string(),
48 open: true,
49 rtt_cap_ms: u64::MAX,
50 },
51 ]);
52 }
53
54 let peer_groups: Result<Vec<PeerGroup>> = configs
55 .into_iter()
56 .map(|config| PeerGroup::init(self.clone(), config))
57 .collect();
58
59 let mut guard = self.write();
60
61 for peer_group in peer_groups? {
62 guard.peer_groups.push(peer_group);
63 }
64
65 drop(guard);
66
67 Ok(())
68 }
69}