use sprite_core::{Engine, Message};
fn main() {
let engine = Engine::new();
let counter = engine.spawn("counter", |ctx| {
let count = ctx.use_state("count", 0i64);
ctx.on_message(move |msg| {
match msg.as_str() {
Some("inc") => {
count.update(|c| c + 1);
println!("count = {}", count.get());
}
Some("dec") => {
count.update(|c| c - 1);
println!("count = {}", count.get());
}
Some("panic") => {
panic!("user-triggered panic");
}
_ => {}
}
});
ctx.on_panic(|| {
println!("Counter recovered! State is intact.");
});
});
std::thread::sleep(std::time::Duration::from_millis(20));
counter.send(Message::text("inc"));
counter.send(Message::text("inc"));
counter.send(Message::text("dec"));
counter.send(Message::text("panic"));
counter.send(Message::text("inc"));
std::thread::sleep(std::time::Duration::from_millis(200));
}