qualia_core_db/p2p/
swarm.rs1use 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}