swactor/examples/hello.rs

56 lines
1.2 KiB
Rust
Raw Normal View History

use swactor::{ActorAddress, ActorInterface, Message, Runtime};
#[repr(C)]
struct Greeter {
pub num_greeted: usize,
}
#[derive(Debug, Default, Clone)]
struct GreetMessage {
/// who do we greet?
who: String,
/// who do we send out greeting back to?
return_addr: ActorAddress,
}
impl Message for GreetMessage {}
impl ActorInterface for Greeter {
type Message = GreetMessage;
type Response = GreetResponse;
fn handle(&mut self, ctx: &Runtime, msg: GreetMessage) {
let res = GreetResponse(format!("Hello, {}!", msg.who));
self.num_greeted += 1;
if let Err(_) = ctx.send(msg.return_addr, res) {
// no error handling
self.num_greeted -= 1;
}
}
}
#[derive(Debug, Default, Clone)]
struct GreetResponse(String);
impl Message for GreetResponse {}
fn main() {
let rt = Runtime::new();
let addr = rt.spawn::<Greeter>();
let inbox = rt.new_inbox::<GreetResponse>();
rt.send(
addr,
GreetMessage {
who: "world".into(),
return_addr: *inbox.addr(),
},
).unwrap();
for _ in 0..3 {
rt.tick();
}
let resp = inbox.try_recv().expect("greeter should have said hello");
println!("{}", resp.0);
}