1use std::collections::{HashMap, HashSet};
2
3use libp2p::PeerId;
4
5use crate::behaviour::ChatBehaviour;
6use crate::NodeOptions;
7
8pub struct Libp2pNetwork {
10 pub swarm: libp2p::Swarm<ChatBehaviour>,
11 pub local_peer_id: PeerId,
12 pub dht_discovery_enabled: bool,
13 pub bootstrap_peer_ids: Vec<PeerId>,
14 pub(crate) pending_responses:
15 HashMap<String, libp2p::request_response::ResponseChannel<Vec<u8>>>,
16 pub(crate) next_response_id: u64,
17 pub(crate) peer_addrs: HashMap<PeerId, Vec<libp2p::Multiaddr>>,
18 pub(crate) peer_conn_addrs: HashMap<PeerId, Vec<String>>,
19 pub(crate) pending_dials: HashSet<PeerId>,
22}
23
24pub fn init_libp2p_network(
26 mut swarm: libp2p::Swarm<ChatBehaviour>,
27 local_peer_id: PeerId,
28 options: &NodeOptions,
29 bootstrap_peer_ids: Vec<PeerId>,
30) -> Libp2pNetwork {
31 if let Err(e) = swarm.listen_on("/p2p-circuit".parse().unwrap()) {
32 tracing::warn!("Failed to listen on /p2p-circuit: {}", e);
33 }
34
35 Libp2pNetwork {
36 swarm,
37 local_peer_id,
38 dht_discovery_enabled: options.dht_discovery_enabled,
39 bootstrap_peer_ids,
40 pending_responses: HashMap::new(),
41 next_response_id: 0,
42 peer_addrs: HashMap::new(),
43 peer_conn_addrs: HashMap::new(),
44 pending_dials: HashSet::new(),
45 }
46}