pub mod error;
pub mod messages;
pub mod reply;
use crate::{
actors::{
lua_vm::{messages::RegisterUserApi, LuaVM},
queue::Queue,
scanmgr::error::Error,
user_engine::UserEngine,
},
userscript_api::scanmgr_api::ScanMgrApi,
};
use kameo::{
actor::{ActorRef, WeakActorRef},
error::BoxError,
mailbox::unbounded::UnboundedMailbox,
Actor,
};
pub struct ScanMgr {
lua_ref: WeakActorRef<LuaVM>,
queue_ref: WeakActorRef<Queue>,
user_engine_ref: WeakActorRef<UserEngine>,
}
impl Actor for ScanMgr {
type Mailbox = UnboundedMailbox<Self>;
async fn on_start(&mut self, actor: ActorRef<Self>) -> Result<(), BoxError> {
let Some(lua_vm) = self.lua_ref.upgrade() else {
return Err(Box::new(Error::NoLuaVm));
};
let scanmgr_api: ScanMgrApi = ScanMgrApi::new(actor.downgrade());
lua_vm.tell(RegisterUserApi::with(scanmgr_api)).await?;
Ok(())
}
}
impl ScanMgr {
#[must_use]
pub fn spawn(
vm: WeakActorRef<LuaVM>,
queue: WeakActorRef<Queue>,
user_engine: WeakActorRef<UserEngine>,
) -> ActorRef<Self> {
let actor: Self = Self {
lua_ref: vm,
queue_ref: queue,
user_engine_ref: user_engine,
};
kameo::spawn(actor)
}
}