use dimas::prelude::*;
#[derive(Debug, Default)]
struct AgentProps {
num: u32,
}
async fn put_callback(ctx: Context<AgentProps>, id: String) -> Result<()> {
println!("{id} is alive");
let mut val = ctx.read()?.num;
val += 1;
ctx.write()?.num = val;
println!("Number of agents is {val}");
Ok(())
}
async fn delete_callback(ctx: Context<AgentProps>, id: String) -> Result<()> {
println!("{id} died");
let mut val = ctx.read()?.num;
val = val.saturating_sub(1);
ctx.write()?.num = val;
println!("Number of agents is {val}");
Ok(())
}
#[dimas::main]
async fn main() -> Result<()> {
init_tracing();
let properties = AgentProps { num: 1 };
let mut agent = Agent::new(properties)
.prefix("examples")
.name("liveliness")
.config(&Config::default())?;
agent
.liveliness_subscriber()
.put_callback(put_callback)
.delete_callback(delete_callback)
.add()?;
agent.liveliness(true);
agent.start().await?;
Ok(())
}