vRp.CD2g_test/utils/timer/newday.go

54 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package timer
import (
"github.com/kercylan98/minotaur/utils/offset"
"github.com/kercylan98/minotaur/utils/times"
"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 *Ticker, name string, trigger bool, handle SystemNewDayEventHandle) {
ticker.Loop(name, times.GetNextDayInterval(time.Now()), times.Day, 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 *Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle) {
ticker.Loop(name, times.GetNextDayInterval(offset.Now()), times.Day, Forever, OnOffsetTimeNewDayEvent, name)
offsetTimeNewDayEventHandles[name] = append(offsetTimeNewDayEventHandles[name], handle)
if trigger {
OnOffsetTimeNewDayEvent(name)
}
}
// OnOffsetTimeNewDayEvent 偏移时间新的一天事件
func OnOffsetTimeNewDayEvent(name string) {
for _, handle := range offsetTimeNewDayEventHandles[name] {
handle()
}
}