use std::sync::Arc;
use std::time::Duration;
use super::client::OrgApi;
use super::state::OrgState;
const INTERVAL: Duration = Duration::from_secs(30);
pub fn start_heartbeat(api: Arc<OrgApi>, state: OrgState) -> tokio::task::JoinHandle<()> {
tokio::spawn(async move {
if let Err(e) = api.heartbeat(&state.device_id).await {
log::warn!("[shield] initial heartbeat failed: {}", e);
}
let mut ticker = tokio::time::interval(INTERVAL);
ticker.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay);
ticker.tick().await;
loop {
ticker.tick().await;
if let Err(e) = api.heartbeat(&state.device_id).await {
log::warn!("[shield] heartbeat failed: {}", e);
}
}
})
}