scatter_net/legacy/net/methods/
init_peer.rs

1use anyhow::Result;
2use iroh::endpoint::Connection;
3
4use crate::{spawn_and_forget, Peer, PeerState, ScatterNet};
5
6impl ScatterNet {
7    pub fn init_peer(&self, connection: Connection, state: Option<PeerState>) -> Result<Peer> {
8        let node_id = connection.remote_node_id()?;
9
10        if let Some(peer) = self.get_peer(&node_id) {
11            peer.replace_connection(connection);
12
13            return Ok(peer);
14        }
15
16        let peer = Peer::builder(self.clone(), node_id)
17            .with_option_state(state)
18            .finalize(connection);
19
20        spawn_and_forget({
21            let peer = peer.clone();
22
23            async move { Ok(peer.select_peer_group().await?) }
24        });
25
26        Ok(peer)
27    }
28}