initial commit
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
This commit is contained in:
42
crates/server/src/iroh_sync.rs
Normal file
42
crates/server/src/iroh_sync.rs
Normal file
@@ -0,0 +1,42 @@
|
||||
use anyhow::Result;
|
||||
use iroh::protocol::Router;
|
||||
use iroh::Endpoint;
|
||||
use iroh_gossip::api::{GossipReceiver, GossipSender};
|
||||
use iroh_gossip::net::Gossip;
|
||||
use iroh_gossip::proto::TopicId;
|
||||
|
||||
/// Initialize Iroh endpoint and gossip for the given topic
|
||||
pub async fn init_iroh_gossip(
|
||||
topic_id: TopicId,
|
||||
) -> Result<(Endpoint, Gossip, Router, GossipSender, GossipReceiver)> {
|
||||
println!("Initializing Iroh endpoint...");
|
||||
|
||||
// Create the Iroh endpoint
|
||||
let endpoint = Endpoint::bind().await?;
|
||||
println!("Endpoint created");
|
||||
|
||||
// Build the gossip protocol
|
||||
println!("Building gossip protocol...");
|
||||
let gossip = Gossip::builder().spawn(endpoint.clone());
|
||||
|
||||
// Setup the router to handle incoming connections
|
||||
println!("Setting up router...");
|
||||
let router = Router::builder(endpoint.clone())
|
||||
.accept(iroh_gossip::ALPN, gossip.clone())
|
||||
.spawn();
|
||||
|
||||
// Subscribe to the topic (no bootstrap peers for now)
|
||||
println!("Subscribing to topic: {:?}", topic_id);
|
||||
let bootstrap_peers = vec![];
|
||||
let subscribe_handle = gossip.subscribe(topic_id, bootstrap_peers).await?;
|
||||
|
||||
// Split into sender and receiver
|
||||
let (sender, mut receiver) = subscribe_handle.split();
|
||||
|
||||
// Wait for join to complete
|
||||
println!("Waiting for gossip join...");
|
||||
receiver.joined().await?;
|
||||
println!("Gossip initialized successfully");
|
||||
|
||||
Ok((endpoint, gossip, router, sender, receiver))
|
||||
}
|
||||
Reference in New Issue
Block a user