1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package data
- import (
- "time"
- "github.com/sirupsen/logrus"
- )
- var (
- stopServerNoticeEnd = "stopServerNoticeEnd"
- )
- type sentry struct {
- Name string
- watcher func(msgId, typ, content string) error // hook方法
- lastStamp int64
- }
- func SendToWorld(msgId, typ, content string) error {
- /*msgItem := msg.GmPlacard{
- MsgId: msgId,
- Type: typ,
- Content: content,
- }
- err := gate.SendToWorld(0, &msgItem)
- logrus.WithField("type", "SendToWorld").Infoln(msgItem, err)*/
- return nil
- }
- func (worker *sentry) Run() {
- for {
- time.Sleep(5 * time.Second) // 5秒扫描一次是否有需要通知的公告
- now := time.Now().Unix()
- worker.lastStamp = now
- for _, v := range Db {
- if v.EndAt < time.Now().Unix() || v.StartAt > time.Now().Unix() { // 如果最后时间小于当前时间,不执行了
- continue
- }
- // 如果间隔周期内执行过,那么跳过
- if v.LastInterval+v.Interval*60 < now {
- if worker.watcher != nil {
- if err := worker.watcher(v.MsgId, v.Type, v.Content); err != nil {
- logrus.WithField("worker", "sentry").Errorln(v, err.Error())
- } else {
- v.LastInterval = now
- v.UpdateAt = now
- // 保存到数据库中
- Db[v.MsgId] = v
- }
- if v.LastInterval+v.Interval*60 > v.EndAt { // 如果是最后一次发送消息, 给服务端发送一个特殊的消息
- if err := worker.watcher("", stopServerNoticeEnd, ""); err != nil {
- logrus.WithField("worker", "sentry").Errorln(v, err.Error())
- }
- }
- }
- }
- }
- }
- }
|