reactive_graph_behaviour_service_impl/
behaviour_system_impl.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use springtime_di::Component;
5use springtime_di::component_alias;
6
7use reactive_graph_behaviour_service_api::BehaviourSystem;
8use reactive_graph_behaviour_service_api::EntityBehaviourManager;
9use reactive_graph_behaviour_service_api::EntityBehaviourRegistry;
10use reactive_graph_behaviour_service_api::EntityComponentBehaviourManager;
11use reactive_graph_behaviour_service_api::EntityComponentBehaviourRegistry;
12use reactive_graph_behaviour_service_api::RelationBehaviourManager;
13use reactive_graph_behaviour_service_api::RelationBehaviourRegistry;
14use reactive_graph_behaviour_service_api::RelationComponentBehaviourManager;
15use reactive_graph_behaviour_service_api::RelationComponentBehaviourRegistry;
16use reactive_graph_lifecycle::Lifecycle;
17use reactive_graph_type_system_api::TypeSystem;
18
19#[derive(Component)]
20pub struct BehaviourSystemImpl {
21    entity_behaviour_manager: Arc<dyn EntityBehaviourManager + Send + Sync>,
22    entity_behaviour_registry: Arc<dyn EntityBehaviourRegistry + Send + Sync>,
23    entity_component_behaviour_manager: Arc<dyn EntityComponentBehaviourManager + Send + Sync>,
24    entity_component_behaviour_registry: Arc<dyn EntityComponentBehaviourRegistry + Send + Sync>,
25    relation_behaviour_manager: Arc<dyn RelationBehaviourManager + Send + Sync>,
26    relation_behaviour_registry: Arc<dyn RelationBehaviourRegistry + Send + Sync>,
27    relation_component_behaviour_manager: Arc<dyn RelationComponentBehaviourManager + Send + Sync>,
28    relation_component_behaviour_registry: Arc<dyn RelationComponentBehaviourRegistry + Send + Sync>,
29
30    type_system: Arc<dyn TypeSystem + Send + Sync>,
31}
32
33#[async_trait]
34#[component_alias]
35impl BehaviourSystem for BehaviourSystemImpl {
36    fn get_entity_behaviour_manager(&self) -> Arc<dyn EntityBehaviourManager + Send + Sync> {
37        self.entity_behaviour_manager.clone()
38    }
39
40    fn get_entity_behaviour_registry(&self) -> Arc<dyn EntityBehaviourRegistry + Send + Sync> {
41        self.entity_behaviour_registry.clone()
42    }
43
44    fn get_entity_component_behaviour_manager(&self) -> Arc<dyn EntityComponentBehaviourManager + Send + Sync> {
45        self.entity_component_behaviour_manager.clone()
46    }
47
48    fn get_entity_component_behaviour_registry(&self) -> Arc<dyn EntityComponentBehaviourRegistry + Send + Sync> {
49        self.entity_component_behaviour_registry.clone()
50    }
51
52    fn get_relation_behaviour_manager(&self) -> Arc<dyn RelationBehaviourManager + Send + Sync> {
53        self.relation_behaviour_manager.clone()
54    }
55
56    fn get_relation_behaviour_registry(&self) -> Arc<dyn RelationBehaviourRegistry + Send + Sync> {
57        self.relation_behaviour_registry.clone()
58    }
59
60    fn get_relation_component_behaviour_manager(&self) -> Arc<dyn RelationComponentBehaviourManager + Send + Sync> {
61        self.relation_component_behaviour_manager.clone()
62    }
63
64    fn get_relation_component_behaviour_registry(&self) -> Arc<dyn RelationComponentBehaviourRegistry + Send + Sync> {
65        self.relation_component_behaviour_registry.clone()
66    }
67
68    fn type_system(&self) -> Arc<dyn TypeSystem + Send + Sync> {
69        self.type_system.clone()
70    }
71}
72
73#[async_trait]
74impl Lifecycle for BehaviourSystemImpl {
75    async fn init(&self) {
76        self.entity_behaviour_registry.init().await;
77        self.entity_component_behaviour_registry.init().await;
78        self.relation_behaviour_registry.init().await;
79        self.relation_component_behaviour_registry.init().await;
80        self.entity_behaviour_manager.init().await;
81        self.entity_component_behaviour_manager.init().await;
82        self.relation_behaviour_manager.init().await;
83        self.relation_component_behaviour_manager.init().await;
84    }
85
86    async fn post_init(&self) {
87        self.entity_behaviour_registry.post_init().await;
88        self.entity_component_behaviour_registry.post_init().await;
89        self.relation_behaviour_registry.post_init().await;
90        self.relation_component_behaviour_registry.post_init().await;
91        self.entity_behaviour_manager.post_init().await;
92        self.entity_component_behaviour_manager.post_init().await;
93        self.relation_behaviour_manager.post_init().await;
94        self.relation_component_behaviour_manager.post_init().await;
95    }
96
97    async fn pre_shutdown(&self) {
98        self.relation_component_behaviour_manager.pre_shutdown().await;
99        self.relation_behaviour_manager.pre_shutdown().await;
100        self.entity_component_behaviour_manager.pre_shutdown().await;
101        self.entity_behaviour_manager.pre_shutdown().await;
102        self.relation_component_behaviour_registry.pre_shutdown().await;
103        self.relation_behaviour_registry.pre_shutdown().await;
104        self.entity_component_behaviour_registry.pre_shutdown().await;
105        self.entity_behaviour_registry.pre_shutdown().await;
106    }
107
108    async fn shutdown(&self) {
109        self.relation_component_behaviour_manager.shutdown().await;
110        self.relation_behaviour_manager.shutdown().await;
111        self.entity_component_behaviour_manager.shutdown().await;
112        self.entity_behaviour_manager.shutdown().await;
113        self.relation_component_behaviour_registry.shutdown().await;
114        self.relation_behaviour_registry.shutdown().await;
115        self.entity_component_behaviour_registry.shutdown().await;
116        self.entity_behaviour_registry.shutdown().await;
117    }
118}