bpm_engine_runtime/
pump.rs1use std::collections::VecDeque;
4
5use super::handler::{EngineContext, EventHandler};
6use bpm_engine_core::EngineEvent;
7use tracing::debug;
8
9pub struct EventPump;
10
11impl EventPump {
12 pub async fn run_async(
14 handlers: &[Box<dyn EventHandler>],
15 initial: EngineEvent,
16 ctx: &mut EngineContext,
17 ) {
18 let mut queue: VecDeque<EngineEvent> = VecDeque::new();
19 queue.push_back(initial);
20
21 while let Some(event) = queue.pop_front() {
22 debug!(event = ?event, "event pump dispatch");
23 for handler in handlers {
24 let new_events = handler.handle(&event, ctx).await;
25 queue.extend(new_events);
26 }
27 }
28 }
29}