use actors_rs::*;
use actors_rs::system::ActorSystem;
use std::time::Duration;
#[derive(Default, Debug)]
struct Child;
impl Actor for Child {
type Msg = String;
fn recv(&mut self, ctx: &Context<Self::Msg>, msg: Self::Msg, _sender: Sender) {
println!("{}: {:?} -> got msg: {}", ctx.name(), self, msg);
}
}
#[derive(Clone, Default, Debug)]
struct SelectTest;
impl Actor for SelectTest {
type Msg = String;
fn pre_start(&mut self, ctx: &Context<Self::Msg>) {
let _ = ctx.actor_of::<Child>("child_a").unwrap();
let _ = ctx.actor_of::<Child>("child_b").unwrap();
}
fn recv(&mut self, ctx: &Context<Self::Msg>, msg: Self::Msg, _sender: Sender) {
println!("{}: {:?} -> got msg: {}", ctx.name(), self, msg);
let path = "../select-actor/child_a";
println!("{}: {:?} -> path: {}", ctx.name(), self, path);
let sel = ctx.select(path).unwrap();
sel.try_tell(path.to_string(), None);
let path = "child_a";
println!("{}: {:?} -> path: {}", ctx.name(), self, path);
let sel = ctx.select(path).unwrap();
sel.try_tell(path.to_string(), None);
let path = "/user/select-actor/child_a";
println!("{}: {:?} -> path: {}", ctx.name(), self, path);
let sel = ctx.select(path).unwrap();
sel.try_tell(path.to_string(), None);
let path = "/user/select-actor/*";
println!("{}: {:?} -> path: {}", ctx.name(), self, path);
let sel = ctx.select(path).unwrap();
sel.try_tell(path.to_string(), None);
let path = "*";
println!("{}: {:?} -> path: {}", ctx.name(), self, path);
let sel = ctx.select(path).unwrap();
sel.try_tell(path.to_string(), None);
}
}
fn main() {
let sys = ActorSystem::new().unwrap();
let actor = sys.actor_of::<SelectTest>("select-actor").unwrap();
actor.tell("msg for select-actor", None);
std::thread::sleep(Duration::from_millis(500));
sys.print_tree();
}