Skip to main content

qualia_core_db/p2p/
swarm.rs

1use crate::p2p::protocol::QualiaSyncCodec;
2use libp2p::{
3    kad::{store::MemoryStore, Behaviour as Kademlia},
4    mdns::tokio::Behaviour as Mdns,
5    request_response::{self, ProtocolSupport},
6    swarm::NetworkBehaviour,
7    StreamProtocol,
8};
9
10#[derive(NetworkBehaviour)]
11pub struct QualiaBehaviour {
12    pub mdns: Mdns,
13    pub kademlia: Kademlia<MemoryStore>,
14    pub request_response: request_response::Behaviour<QualiaSyncCodec>,
15}
16
17pub fn build_behaviour(local_peer_id: libp2p::PeerId) -> QualiaBehaviour {
18    let mdns = Mdns::new(libp2p::mdns::Config::default(), local_peer_id).unwrap();
19    let store = MemoryStore::new(local_peer_id);
20    let kademlia = Kademlia::new(local_peer_id, store);
21
22    let protocol = StreamProtocol::new("/qualia/crdt-sync/1.0.0");
23    let req_res = request_response::Behaviour::new(
24        [(protocol, ProtocolSupport::Full)],
25        request_response::Config::default(),
26    );
27
28    QualiaBehaviour {
29        mdns,
30        kademlia,
31        request_response: req_res,
32    }
33}