scatter_net/legacy/net/methods/
init_peer.rs1use 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}