pub struct HyperclockEngine { /* private fields */ }
Expand description
The main Hyperclock engine.
This struct is the central point of control. It holds the system’s configuration,
manages all active listeners and tasks, and drives the event loop. The Engine
is designed to be cloned and shared across tasks, providing a handle to the
running instance.
Implementations§
Source§impl HyperclockEngine
impl HyperclockEngine
Sourcepub fn new(config: HyperclockConfig) -> Self
pub fn new(config: HyperclockConfig) -> Self
Creates a new HyperclockEngine
with the given configuration.
Source§impl HyperclockEngine
impl HyperclockEngine
Sourcepub async fn on_interval(
&self,
phase_to_watch: PhaseId,
interval: Duration,
task_logic: impl FnMut() + Send + Sync + 'static,
) -> ListenerId
pub async fn on_interval( &self, phase_to_watch: PhaseId, interval: Duration, task_logic: impl FnMut() + Send + Sync + 'static, ) -> ListenerId
Registers a task to be executed at a regular interval.
The task’s interval timer will only advance during the specified phase
.
The provided task_logic
closure will be executed each time the interval elapses.
§Arguments
phase_to_watch
- ThePhaseId
during which this interval is active.interval
- TheDuration
between task executions.task_logic
- A closure to execute when the interval fires.
§Returns
A ListenerId
which can be used to later remove this watcher.
Sourcepub async fn on_conditional(
&self,
condition: impl Fn() -> bool + Send + Sync + 'static,
task_logic: impl FnMut() + Send + Sync + 'static,
is_one_shot: bool,
) -> ListenerId
pub async fn on_conditional( &self, condition: impl Fn() -> bool + Send + Sync + 'static, task_logic: impl FnMut() + Send + Sync + 'static, is_one_shot: bool, ) -> ListenerId
Registers a task to be executed whenever a given condition is met.
The condition
closure is checked on every tick of the engine. If it returns true
,
the task_logic
closure is executed.
§Arguments
condition
- A closure that returnstrue
when the task should fire.task_logic
- A closure to execute when the condition is met.is_one_shot
- If true, the watcher will be automatically removed after firing once.
§Returns
A ListenerId
which can be used to later remove this watcher.
Sourcepub async fn add_lifecycle_loop(
&self,
phase_to_watch: PhaseId,
interval: Duration,
steps: Vec<LifecycleStep>,
repetition_policy: RepetitionPolicy,
) -> TaskId
pub async fn add_lifecycle_loop( &self, phase_to_watch: PhaseId, interval: Duration, steps: Vec<LifecycleStep>, repetition_policy: RepetitionPolicy, ) -> TaskId
Adds a new LifecycleLoop
to the engine.
This creates a complex automation that executes a sequence of steps,
with each step advancing after the specified interval
.
§Returns
A TaskId
for the created lifecycle loop.
Sourcepub async fn remove_interval_listener(&self, id: ListenerId) -> bool
pub async fn remove_interval_listener(&self, id: ListenerId) -> bool
Removes an interval listener from the engine.
Returns true
if the listener was found and removed.
Sourcepub async fn remove_conditional_listener(&self, id: ListenerId) -> bool
pub async fn remove_conditional_listener(&self, id: ListenerId) -> bool
Removes a conditional listener from the engine.
Returns true
if the listener was found and removed.
Sourcepub async fn remove_lifecycle_loop(&self, id: TaskId) -> bool
pub async fn remove_lifecycle_loop(&self, id: TaskId) -> bool
Removes a lifecycle loop from the engine.
This also removes the internal interval watcher that drives the loop.
Returns true
if the loop was found and removed.
Sourcepub fn subscribe_tick_events(&self) -> Receiver<Arc<TickEvent>>
pub fn subscribe_tick_events(&self) -> Receiver<Arc<TickEvent>>
Subscribes to the raw TickEvent
stream.
This provides access to the highest-frequency event in the engine, firing
directly from the SystemClock
before phase processing. This is a
power-user feature for tasks that need to react to every single tick
without regard for the phase cycle.
Most users should prefer subscribe_phase_events
.
Sourcepub fn subscribe_system_events(&self) -> Receiver<SystemEvent>
pub fn subscribe_system_events(&self) -> Receiver<SystemEvent>
Subscribes to the SystemEvent
stream.
Sourcepub fn subscribe_phase_events(&self) -> Receiver<PhaseEvent>
pub fn subscribe_phase_events(&self) -> Receiver<PhaseEvent>
Subscribes to the PhaseEvent
stream.
Sourcepub fn subscribe_gong_events(&self) -> Receiver<GongEvent>
pub fn subscribe_gong_events(&self) -> Receiver<GongEvent>
Subscribes to the GongEvent
stream.
Sourcepub fn subscribe_task_events(&self) -> Receiver<TaskEvent>
pub fn subscribe_task_events(&self) -> Receiver<TaskEvent>
Subscribes to the TaskEvent
stream.
Sourcepub fn subscribe_automation_events(&self) -> Receiver<AutomationEvent>
pub fn subscribe_automation_events(&self) -> Receiver<AutomationEvent>
Subscribes to the AutomationEvent
stream.
Sourcepub fn subscribe_conditional_events(&self) -> Receiver<ConditionalEvent>
pub fn subscribe_conditional_events(&self) -> Receiver<ConditionalEvent>
Subscribes to the ConditionalEvent
stream.
Sourcepub fn subscribe_user_events(&self) -> Receiver<UserEvent>
pub fn subscribe_user_events(&self) -> Receiver<UserEvent>
Subscribes to the UserEvent
stream.
Sourcepub fn broadcast_user_event(&self, event: UserEvent)
pub fn broadcast_user_event(&self, event: UserEvent)
Broadcasts a custom UserEvent
to all subscribers.
Trait Implementations§
Source§impl Clone for HyperclockEngine
impl Clone for HyperclockEngine
Source§fn clone(&self) -> HyperclockEngine
fn clone(&self) -> HyperclockEngine
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more