reactive_graph_reactive_service_impl/
reactive_system_impl.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use reactive_graph_behaviour_service_api::BehaviourSystem;
5use springtime_di::Component;
6use springtime_di::component_alias;
7
8use reactive_graph_lifecycle::Lifecycle;
9use reactive_graph_reactive_service_api::ReactiveEntityManager;
10use reactive_graph_reactive_service_api::ReactiveFlowManager;
11use reactive_graph_reactive_service_api::ReactiveInstanceEventManager;
12use reactive_graph_reactive_service_api::ReactiveRelationManager;
13use reactive_graph_reactive_service_api::ReactiveSystem;
14use reactive_graph_type_system_api::TypeSystem;
15
16#[derive(Component)]
17pub struct ReactiveSystemImpl {
18    reactive_entity_manager: Arc<dyn ReactiveEntityManager + Send + Sync>,
19    reactive_relation_manager: Arc<dyn ReactiveRelationManager + Send + Sync>,
20    reactive_flow_manager: Arc<dyn ReactiveFlowManager + Send + Sync>,
21    reactive_instance_event_manager: Arc<dyn ReactiveInstanceEventManager + Send + Sync>,
22
23    type_system: Arc<dyn TypeSystem + Send + Sync>,
24    behaviour_system: Arc<dyn BehaviourSystem + Send + Sync>,
25}
26
27#[async_trait]
28#[component_alias]
29impl ReactiveSystem for ReactiveSystemImpl {
30    fn get_reactive_entity_manager(&self) -> Arc<dyn ReactiveEntityManager + Send + Sync> {
31        self.reactive_entity_manager.clone()
32    }
33
34    fn get_reactive_flow_manager(&self) -> Arc<dyn ReactiveFlowManager + Send + Sync> {
35        self.reactive_flow_manager.clone()
36    }
37
38    fn get_reactive_relation_manager(&self) -> Arc<dyn ReactiveRelationManager + Send + Sync> {
39        self.reactive_relation_manager.clone()
40    }
41
42    fn get_reactive_instance_event_manager(&self) -> Arc<dyn ReactiveInstanceEventManager + Send + Sync> {
43        self.reactive_instance_event_manager.clone()
44    }
45
46    fn type_system(&self) -> Arc<dyn TypeSystem + Send + Sync> {
47        self.type_system.clone()
48    }
49
50    fn behaviour_system(&self) -> Arc<dyn BehaviourSystem + Send + Sync> {
51        self.behaviour_system.clone()
52    }
53}
54
55#[async_trait]
56impl Lifecycle for ReactiveSystemImpl {
57    async fn init(&self) {
58        self.reactive_entity_manager.init().await;
59        self.reactive_relation_manager.init().await;
60        self.reactive_flow_manager.init().await;
61        self.reactive_instance_event_manager.init().await;
62    }
63
64    async fn post_init(&self) {
65        self.reactive_entity_manager.post_init().await;
66        self.reactive_relation_manager.post_init().await;
67        self.reactive_flow_manager.post_init().await;
68        self.reactive_instance_event_manager.post_init().await;
69    }
70
71    async fn pre_shutdown(&self) {
72        self.reactive_instance_event_manager.pre_shutdown().await;
73        self.reactive_flow_manager.pre_shutdown().await;
74        self.reactive_relation_manager.pre_shutdown().await;
75        self.reactive_entity_manager.pre_shutdown().await;
76    }
77
78    async fn shutdown(&self) {
79        self.reactive_instance_event_manager.shutdown().await;
80        self.reactive_flow_manager.shutdown().await;
81        self.reactive_relation_manager.shutdown().await;
82        self.reactive_entity_manager.shutdown().await;
83    }
84}