mf_core/helpers/
event_helper.rs1use crate::{
10 config::ForgeConfig,
11 debug::debug,
12 error::{error_utils, ForgeResult},
13 event::{Event, EventBus},
14 metrics,
15 types::RuntimeOptions,
16};
17use mf_state::state::State;
18use std::sync::Arc;
19
20pub struct EventHelper;
22
23impl EventHelper {
24 pub async fn create_and_init_event_bus(
34 config: &ForgeConfig,
35 runtime_options: &RuntimeOptions,
36 state: Arc<State>,
37 ) -> ForgeResult<EventBus<Event>> {
38 let event_bus = EventBus::with_config(config.event.clone());
39 debug!("已创建事件总线");
40
41 let handlers = runtime_options.get_event_handlers();
43 event_bus.add_event_handlers(handlers)?;
44
45 event_bus.start_event_loop();
47 debug!("事件总线已启动");
48
49 event_bus.broadcast_blocking(Event::Create(state)).map_err(|e| {
51 error_utils::event_error(format!("广播 Create 事件失败: {e}"))
52 })?;
53
54 Ok(event_bus)
55 }
56
57 pub async fn emit_event(
66 event_bus: &mut EventBus<Event>,
67 event: Event,
68 ) -> ForgeResult<()> {
69 metrics::event_emitted(event.name());
70 event_bus.broadcast(event).await?;
71 Ok(())
72 }
73
74 pub fn emit_event_blocking(
83 event_bus: &mut EventBus<Event>,
84 event: Event,
85 ) -> ForgeResult<()> {
86 metrics::event_emitted(event.name());
87 event_bus.broadcast_blocking(event)?;
88 Ok(())
89 }
90
91 pub async fn destroy_event_bus(
99 event_bus: &mut EventBus<Event>
100 ) -> ForgeResult<()> {
101 event_bus.broadcast(Event::Destroy).await?;
103 event_bus.destroy().await?;
105 debug!("事件总线已销毁");
106 Ok(())
107 }
108
109 pub fn destroy_event_bus_blocking(event_bus: &mut EventBus<Event>) {
114 event_bus.destroy_blocking();
115 debug!("事件总线已销毁(同步)");
116 }
117}