use std::error::Error;
use std::time::Duration;
use tcb::broadcast::broadcast_trait::{GenericReturn, TCB};
use tcb::configuration::middleware_configuration::read_configuration_file;
use tcb::graph::graph::GRAPH;
fn main() -> Result<(), Box<dyn Error>> {
let configuration_file = format!("path-to-config-file.toml");
let configuration = read_configuration_file(configuration_file)?;
let id: usize = 0;
let port: usize = 61887;
let group_addresses = vec![format!("localhost:61888")];
let mut graph = GRAPH::new(id, port, group_addresses, configuration);
let message = format!("Hello world");
let serialized_message = message.into_bytes();
let sent_message_context = graph.send(serialized_message);
let blocking_delivery = graph.recv()?;
let non_blocking_delivery = graph.try_recv()?;
let timeout_delivery = graph.recv_timeout(Duration::from_secs(1))?;
match blocking_delivery {
GenericReturn::Delivery(serialized_delivery, _id, _counter) => {
let delivered_message = String::from_utf8(serialized_delivery)?;
println!("Delivered message -> {}", delivered_message);
}
GenericReturn::Stable(id, counter) => {
graph.tcbstable(id, counter);
}
}
Ok(())
}