scatter_net/legacy/net/methods/
init_peer_groups.rs

1use 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}