Skip to main content

cadmus_core/task/
time_sync.rs

1use std::sync::mpsc::Sender;
2
3use crate::task::{BackgroundTask, ShutdownSignal, TaskId};
4use crate::time_manager::TimeManager;
5use crate::view::Event;
6
7const NTP_HOST: &str = "time.cloudflare.com:123";
8
9pub struct TimeSyncTask {
10    time_manager: &'static TimeManager,
11    manual: bool,
12}
13
14impl TimeSyncTask {
15    pub fn new(time_manager: &'static TimeManager, manual: bool) -> Self {
16        TimeSyncTask {
17            time_manager,
18            manual,
19        }
20    }
21}
22
23impl BackgroundTask for TimeSyncTask {
24    fn id(&self) -> TaskId {
25        TaskId::TimeSync
26    }
27
28    fn run(&mut self, hub: &Sender<Event>, _shutdown: &ShutdownSignal) {
29        if let Err(e) = self.time_manager.sync(NTP_HOST, self.manual, hub) {
30            tracing::error!(error = %e, "time sync failed");
31        }
32    }
33}