2026-01-23 05:00:57 +00:00
|
|
|
use swactor::{ActorAddress, ActorInterface, Message, Runtime, RuntimeFlavor};
|
2025-11-25 00:39:17 +00:00
|
|
|
|
2026-01-23 05:00:57 +00:00
|
|
|
#[derive(Debug, Default)]
|
|
|
|
|
struct Greeter {
|
|
|
|
|
pub num_greeted: usize,
|
2025-11-25 00:39:17 +00:00
|
|
|
}
|
|
|
|
|
|
2026-01-23 05:00:57 +00:00
|
|
|
#[derive(Debug, Default, Clone)]
|
|
|
|
|
struct GreetMessage {
|
|
|
|
|
/// who do we greet?
|
|
|
|
|
who: String,
|
2025-11-25 00:39:17 +00:00
|
|
|
|
2026-01-23 05:00:57 +00:00
|
|
|
/// who do we send out greeting back to?
|
|
|
|
|
return_addr: ActorAddress,
|
|
|
|
|
}
|
2026-01-23 06:48:26 +00:00
|
|
|
|
|
|
|
|
#[derive(Debug, Default, Clone)]
|
|
|
|
|
struct GreetResponse(String);
|
2026-01-23 05:00:57 +00:00
|
|
|
|
|
|
|
|
impl ActorInterface for Greeter {
|
|
|
|
|
type Incoming = 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_to(msg.return_addr, res) {
|
|
|
|
|
// no error handling
|
|
|
|
|
self.num_greeted -= 1;
|
2025-11-25 00:39:17 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-23 05:00:57 +00:00
|
|
|
|
2025-11-25 00:39:17 +00:00
|
|
|
fn main() {
|
2026-01-23 05:00:57 +00:00
|
|
|
let mut rt = Runtime::new(100, Some(RuntimeFlavor::SingleThreaded));
|
|
|
|
|
let addr = rt
|
|
|
|
|
.spawn(Greeter::default())
|
|
|
|
|
.expect("failed to spawn greeter");
|
|
|
|
|
let inbox = rt.new_inbox::<GreetResponse>();
|
|
|
|
|
|
|
|
|
|
rt.send_to(
|
|
|
|
|
addr,
|
|
|
|
|
GreetMessage {
|
|
|
|
|
who: "world".into(),
|
|
|
|
|
return_addr: *inbox.addr(),
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
for _ in 0..3 {
|
|
|
|
|
rt.tick();
|
2025-11-25 00:39:17 +00:00
|
|
|
}
|
2026-01-23 05:00:57 +00:00
|
|
|
|
|
|
|
|
let resp = inbox.try_recv().expect("greeter should have said hello");
|
|
|
|
|
|
|
|
|
|
println!("{}", resp.0);
|
2025-11-25 00:39:17 +00:00
|
|
|
}
|