1use anyhow::Result;
2use iroh::{Endpoint, SecretKey};
3use iroh_gossip::net::Gossip;
4
5use distributed_topic_tracker::{AutoDiscoveryGossip, RecordPublisher, TopicId};
7
8#[tokio::main]
9async fn main() -> Result<()> {
10 let secret_key = SecretKey::generate(rand::rngs::OsRng);
12
13 let endpoint = Endpoint::builder()
15 .secret_key(secret_key.clone())
16 .discovery_n0()
17 .bind()
18 .await?;
19
20 let gossip = Gossip::builder().spawn(endpoint.clone());
22
23 let _router = iroh::protocol::Router::builder(endpoint.clone())
25 .accept(iroh_gossip::ALPN, gossip.clone())
26 .spawn();
27
28 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
29 let initial_secret = b"my-initial-secret".to_vec();
30
31 let record_publisher = RecordPublisher::new(
34 topic_id.clone(),
35 endpoint.node_id().public(),
36 secret_key.secret().clone(),
37 None,
38 initial_secret,
39 );
40
41 let topic = gossip
42 .subscribe_and_join_with_auto_discovery(record_publisher)
43 .await?;
44
45 println!("[joined topic]");
46
47 let (_gossip_sender, _gossip_receiver) = topic.split().await?;
50
51 Ok(())
52}