reactive_graph_reactive_service_impl/
reactive_system_impl.rs1use 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}