feat: times 包新增 SystemNewDay 和 OffsetTimeNewDay 事件

This commit is contained in:
kercylan98 2023-07-28 18:11:04 +08:00
parent 24f54a1536
commit 2a0c5b84a8
1 changed files with 53 additions and 0 deletions

53
utils/times/newday.go Normal file
View File

@ -0,0 +1,53 @@
package times
import (
"github.com/kercylan98/minotaur/utils/offset"
"github.com/kercylan98/minotaur/utils/timer"
"time"
)
type (
SystemNewDayEventHandle func()
OffsetTimeNewDayEventHandle func()
)
var (
systemNewDayEventHandles = make(map[string][]SystemNewDayEventHandle)
offsetTimeNewDayEventHandles = make(map[string][]OffsetTimeNewDayEventHandle)
)
// RegSystemNewDayEvent 注册系统新的一天事件
// - 建议全局注册一个事件后再另行拓展
// - 将特定 name 的定时任务注册到 ticker 中,在系统时间到达每天的 00:00:00 时触发,如果 trigger 为 true则立即触发一次
func RegSystemNewDayEvent(ticker *timer.Ticker, name string, trigger bool, handle SystemNewDayEventHandle) {
ticker.Loop(name, GetNextDayInterval(time.Now()), Day, timer.Forever, OnSystemNewDayEvent, name)
systemNewDayEventHandles[name] = append(systemNewDayEventHandles[name], handle)
if trigger {
OnSystemNewDayEvent(name)
}
}
// OnSystemNewDayEvent 系统新的一天事件
func OnSystemNewDayEvent(name string) {
for _, handle := range systemNewDayEventHandles[name] {
handle()
}
}
// RegOffsetTimeNewDayEvent 注册偏移时间新的一天事件
// - 建议全局注册一个事件后再另行拓展
// - 与 RegSystemNewDayEvent 类似,但是触发时间为 offset 时间到达每天的 00:00:00
func RegOffsetTimeNewDayEvent(ticker *timer.Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle) {
ticker.Loop(name, GetNextDayInterval(offset.Now()), Day, timer.Forever, OnOffsetTimeNewDayEvent, name)
offsetTimeNewDayEventHandles[name] = append(offsetTimeNewDayEventHandles[name], handle)
if trigger {
OnOffsetTimeNewDayEvent(name)
}
}
// OnOffsetTimeNewDayEvent 偏移时间新的一天事件
func OnOffsetTimeNewDayEvent(name string) {
for _, handle := range offsetTimeNewDayEventHandles[name] {
handle()
}
}