reactive_graph_behaviour_service_impl/
behaviour_system_impl.rs1use 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}