use bytes::Bytes;
use grapevine::{Node, NodeConfig};
use tracing::info;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
info!("Starting simple node example");
let config = NodeConfig::default();
let node = Node::new(config).await?;
node.on_message(|origin, data| {
info!("Received message from {origin}: {data:?}");
})
.await;
node.start().await?;
let addr = node.local_addr().await.expect("No local address");
info!("Node listening on {addr}");
node.broadcast(Bytes::from("Hello from simple node!"))
.await?;
tokio::signal::ctrl_c().await?;
info!("Shutting down...");
node.shutdown().await?;
Ok(())
}