use busrt::broker::{AaaMap, Broker, ClientAaa, ServerConfig};
use ipnetwork::IpNetwork;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut broker = Broker::new();
broker.init_default_core_rpc().await?;
let aaa_map = AaaMap::default();
{
let mut map = aaa_map.lock();
map.insert(
"test".to_owned(),
ClientAaa::new().hosts_allow(vec![IpNetwork::V4("127.0.0.0/8".parse()?)]),
);
map.insert(
"test2".to_owned(),
ClientAaa::new()
.allow_publish_to(&["news/#"])
.deny_subscribe()
.deny_broadcast()
.allow_p2p_to(&["test"]),
);
}
let config = ServerConfig::new().aaa_map(aaa_map);
broker.spawn_tcp_server("0.0.0.0:7777", config).await?;
loop {
sleep(Duration::from_secs(5)).await;
println!("forcing test2 disconnect");
if let Err(e) = broker.force_disconnect("test2") {
eprintln!("{}", e);
}
}
}