/
main.go
83 lines (64 loc) · 1.51 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"fmt"
"strconv"
"time"
"util/schedule"
)
type DemoTask struct {
timestamp int64
}
func (r *DemoTask) RunAt() int64 {
return r.timestamp
}
func (r *DemoTask) Run(s *schedule.TimingSchedule) {
t := time.Unix(r.timestamp, 0)
fmt.Printf("do demo task. runAt:%s now:%s\n", t.String(), time.Now())
}
func (r *DemoTask) OnError(err error) {
}
type ErrTask struct {
timestamp int64
}
func (r *ErrTask) RunAt() int64 {
return r.timestamp
}
func (r *ErrTask) Run(s *schedule.TimingSchedule) {
panic("panic on run ErrTask")
}
func (r *ErrTask) OnError(err error) {
fmt.Println(err)
panic("panic on error")
}
func NewDemoTask(time string) schedule.ITimingTask {
t, _ := schedule.NewTodayTime(time)
return &DemoTask{timestamp: t}
}
func NewErrTask(time string) schedule.ITimingTask {
t, _ := schedule.NewTodayTime(time)
return &ErrTask{timestamp: t}
}
func GetNextSecondTime() string {
now := time.Now().Format(time.RFC3339)
hour, _ := strconv.Atoi(now[11:13])
min, _ := strconv.Atoi(now[14:16])
second, _ := strconv.Atoi(now[17:19])
if second == 59 && min == 59 {
hour++
return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
}
if second == 59 {
min++
return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
}
second++
return fmt.Sprintf("%02d:%02d:%02d", hour, min, second)
}
func main() {
s := schedule.NewTimingSchedule(2, 1, NewErrTask(GetNextSecondTime()))
for i := 0; i < 5; i++ {
s.Push(NewDemoTask(GetNextSecondTime()))
}
s.Start()
time.Sleep(3 * time.Second)
}