|
@@ -7,12 +7,16 @@ use std::collections::HashMap;
|
|
|
type TaskID = u64;
|
|
|
|
|
|
pub struct Timer {
|
|
|
+ /// cron manager
|
|
|
delay_timer: DelayTimer,
|
|
|
|
|
|
+ /// save the current state
|
|
|
timer_map: HashMap<String, (TaskID, u64)>,
|
|
|
|
|
|
+ /// increment id
|
|
|
timer_count: TaskID,
|
|
|
|
|
|
+ /// save the instance of the app
|
|
|
core: Option<Core>,
|
|
|
}
|
|
|
|
|
@@ -41,12 +45,15 @@ impl Timer {
|
|
|
for (uid, diff) in diff_map.into_iter() {
|
|
|
match diff {
|
|
|
DiffFlag::Del(tid) => {
|
|
|
+ let _ = self.timer_map.remove(&uid);
|
|
|
log_if_err!(self.delay_timer.remove_task(tid));
|
|
|
}
|
|
|
DiffFlag::Add(tid, val) => {
|
|
|
+ let _ = self.timer_map.insert(uid.clone(), (tid, val));
|
|
|
log_if_err!(self.add_task(uid, tid, val));
|
|
|
}
|
|
|
DiffFlag::Mod(tid, val) => {
|
|
|
+ let _ = self.timer_map.insert(uid.clone(), (tid, val));
|
|
|
log_if_err!(self.delay_timer.remove_task(tid));
|
|
|
log_if_err!(self.add_task(uid, tid, val));
|
|
|
}
|
|
@@ -116,6 +123,7 @@ impl Timer {
|
|
|
|
|
|
let task = TaskBuilder::default()
|
|
|
.set_task_id(tid)
|
|
|
+ .set_maximum_parallel_runnable_num(1)
|
|
|
.set_frequency_repeated_by_minutes(minutes)
|
|
|
// .set_frequency_repeated_by_seconds(minutes) // for test
|
|
|
.spawn_async_routine(move || Self::async_task(core.clone(), uid.clone()))
|
|
@@ -136,6 +144,7 @@ impl Timer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[derive(Debug)]
|
|
|
enum DiffFlag {
|
|
|
Del(TaskID),
|
|
|
Add(TaskID, u64),
|