rill_engine/actors/engine/
actor.rs

1use crate::actors::connector::RillConnector;
2//use crate::actors::pool::RillPool;
3use crate::config::EngineConfig;
4use anyhow::Error;
5use async_trait::async_trait;
6use meio::{Actor, Context, Eliminated, IdOf, InterruptedBy, StartedBy};
7use rill_protocol::io::provider::EntryId;
8use strum::{EnumIter, IntoEnumIterator};
9
10/// The supervisor that spawns a connector.
11pub struct RillEngine {
12    name: EntryId,
13    /// It wrapped with `Option` to take it for a `Connector` instance later.
14    config: Option<EngineConfig>,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Hash, EnumIter)]
18pub enum Group {
19    Connector,
20    //Pool,
21}
22
23impl Actor for RillEngine {
24    type GroupBy = Group;
25
26    fn name(&self) -> String {
27        format!("RillEngine({})", &self.name)
28    }
29}
30
31impl RillEngine {
32    /// Creates a new supervisor instance.
33    pub fn new(config: EngineConfig) -> Self {
34        let name = config.provider_name();
35        Self {
36            name,
37            config: Some(config),
38        }
39    }
40}
41
42#[async_trait]
43impl<T: Actor> StartedBy<T> for RillEngine {
44    async fn handle(&mut self, ctx: &mut Context<Self>) -> Result<(), Error> {
45        ctx.termination_sequence(Group::iter().collect());
46
47        let config = self.config.take().unwrap();
48        let connector = RillConnector::new(config);
49        ctx.spawn_actor(connector, Group::Connector);
50
51        /*
52        let pool = RillPool::new();
53        ctx.spawn_actor(pool, Group::Pool);
54        */
55
56        Ok(())
57    }
58}
59
60#[async_trait]
61impl<T: Actor> InterruptedBy<T> for RillEngine {
62    async fn handle(&mut self, ctx: &mut Context<Self>) -> Result<(), Error> {
63        ctx.shutdown();
64        Ok(())
65    }
66}
67
68#[async_trait]
69impl Eliminated<RillConnector> for RillEngine {
70    async fn handle(
71        &mut self,
72        _id: IdOf<RillConnector>,
73        ctx: &mut Context<Self>,
74    ) -> Result<(), Error> {
75        ctx.shutdown();
76        Ok(())
77    }
78}
79
80/*
81#[async_trait]
82impl Eliminated<RillPool> for RillEngine {
83    async fn handle(&mut self, _id: IdOf<RillPool>, ctx: &mut Context<Self>) -> Result<(), Error> {
84        if !ctx.is_terminating() {
85            log::error!("Callbacks pool terminated!");
86        }
87        Ok(())
88    }
89}
90*/