use tenzro_network::{
NetworkConfig, NetworkMessage, NetworkService, TenzroNetworkService, MessagePayload,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
let config = NetworkConfig::local();
let network = TenzroNetworkService::new(config).await?;
println!("Network service started!");
let peer_id = network.local_peer_id().await?;
println!("Local peer ID: {}", peer_id);
let mut blocks_rx = network.subscribe("tenzro/blocks").await?;
println!("Subscribed to blocks topic");
let mut txs_rx = network.subscribe("tenzro/transactions").await?;
println!("Subscribed to transactions topic");
tokio::spawn(async move {
while let Some(msg) = blocks_rx.recv().await {
println!("Received block message: {:?}", msg.payload);
}
});
tokio::spawn(async move {
while let Some(msg) = txs_rx.recv().await {
println!("Received transaction message: {:?}", msg.payload);
}
});
let ping_message = NetworkMessage::new(MessagePayload::Ping);
network.broadcast("tenzro/status", ping_message).await?;
println!("Broadcasted ping message");
let peers = network.connected_peers().await?;
println!("Connected peers: {} peers", peers.len());
for peer in peers {
println!(" - {}", peer);
}
println!("\nNetwork service is running. Press Ctrl+C to exit.");
tokio::signal::ctrl_c().await?;
println!("Shutting down...");
Ok(())
}