use std::time::Duration;
use actordb::node::{Node, NodeConfig};
#[tokio::main]
async fn main() {
let a = Node::start(
"node-a".to_string(),
"127.0.0.1:0".parse().unwrap(),
NodeConfig::builder().build(),
)
.await
.unwrap();
let b = Node::start(
"node-b".to_string(),
"127.0.0.1:0".parse().unwrap(),
NodeConfig::builder().build(),
)
.await
.unwrap();
let c = Node::start(
"node-c".to_string(),
"127.0.0.1:0".parse().unwrap(),
NodeConfig::builder().build(),
)
.await
.unwrap();
b.connect(a.addr()).await.unwrap();
c.connect(a.addr()).await.unwrap();
tokio::time::sleep(Duration::from_millis(500)).await;
a.put("greeting".to_string(), b"hello from a".to_vec())
.await
.unwrap();
b.put("counter".to_string(), b"42".to_vec()).await.unwrap();
tokio::time::sleep(Duration::from_millis(100)).await;
c.put("greeting".to_string(), b"hello from c".to_vec())
.await
.unwrap();
tokio::time::sleep(Duration::from_secs(2)).await;
for n in [&a, &b, &c] {
println!("--- {} ({}) ---", n.id(), n.addr());
let mut all: Vec<_> = n.get_all().await.unwrap().into_iter().collect();
all.sort_by(|x, y| x.0.cmp(&y.0));
for (key, v) in all {
println!(
" {key} = {:?} (ts={} origin={})",
String::from_utf8_lossy(&v.value),
v.timestamp_ms,
v.node_id,
);
}
}
a.shutdown().await.unwrap();
b.shutdown().await.unwrap();
c.shutdown().await.unwrap();
}