Host API 参考
Timer 接口
用于在宿主侧注册 timeout / interval 定时器,并在触发时以插件事件回调回来。
接口定义
interface timer {
set-timeout: func(delay-ms: u64, payload: string) -> future<u64>;
set-interval: func(interval-ms: u64, payload: string) -> future<u64>;
clear-timer: func(timer-id: u64) -> future;
}函数
set-timeout
- 参数:
delay-ms: u64延迟毫秒数。payload: string定时器自定义载荷。
- 返回:
future<u64>,成功时返回timer-id。
set-interval
- 参数:
interval-ms: u64间隔毫秒数。payload: string定时器自定义载荷。
- 返回:
future<u64>,成功时返回timer-id。
clear-timer
- 参数:
timer-id: u64 - 返回:
future<()>。
注意事项
- 宿主会保证
delay-ms/interval-ms最小为1ms,避免出现 0 间隔。 set-timeout触发一次后会自动从宿主侧移除。set-interval会持续触发,直到你调用clear-timer,或插件实例被销毁。clear-timer即使传入不存在的timer-id,当前也不会报错,只是静默返回。
事件回调
定时器触发后,插件会在 on_event 中收到 event::EventType::Timer,event-payload 当前是一个 JSON 字符串,形如:
{
"timerId": 1,
"kind": "timeout",
"payload": "refresh-devices"
}timerId:宿主分配的定时器 ID。kind:timeout或interval。payload:你在set-timeout/set-interval里原样传入的字符串。
示例
use crate::astrobox::psys_host::timer;
pub async fn arm_refresh_timeout() -> u64 {
timer::set_timeout(3_000, "refresh-devices").await
}
pub async fn stop_timer(timer_id: u64) {
timer::clear_timer(timer_id).await;
}