use crate::data::{ArconEvent, ArconMessage, ArconNever};
use kompact::prelude::*;
#[derive(ComponentDefinition)]
pub struct SystemKiller {
ctx: ComponentContext<Self>,
}
impl Actor for SystemKiller {
type Message = ArconMessage<ArconNever>;
fn receive_local(&mut self, msg: Self::Message) -> Handled {
for ev in msg.events.as_slice() {
let ev = ev.unwrap_ref();
match ev {
ArconEvent::Death(s) => {
info!(self.log(), "Received Death event: {}", s);
info!(self.log(), "Shutting down the kompact system");
self.ctx.system().shutdown_async();
}
_ => trace!(self.log(), "Ignoring non-death event: {:?}", ev),
}
}
Handled::Ok
}
fn receive_network(&mut self, _msg: NetMessage) -> Handled {
Handled::Ok
}
}
ignore_lifecycle!(SystemKiller);
impl SystemKiller {
#[allow(dead_code)]
pub fn new() -> SystemKiller {
SystemKiller {
ctx: ComponentContext::uninitialised(),
}
}
}