72 lines
2.2 KiB
Go
Raw Normal View History

2025-05-15 17:30:33 +08:00
package domain
import (
"admin/apps/game/domain/entity"
"admin/apps/game/domain/projects"
"admin/apps/game/model"
"admin/internal/consts"
"admin/internal/event"
"admin/internal/global"
"admin/lib/dtimer"
"admin/lib/xlog"
"encoding/json"
"fmt"
"time"
)
func (svc *CommonResourceService) startEventSubscriber() {
event.GetMgrInstance().Subscribe("resource.create", event.EventTopic_DelayInvokeCreateHook, svc.handleResourceDelayInvokeCreateHook)
}
func (svc *CommonResourceService) handleResourceDelayInvokeCreateHook(msg *event.Msg) {
payload := &event.EventPayload_DelayInvokeCreateHook{}
err := json.Unmarshal(msg.Payload, payload)
if err != nil {
xlog.Warnf("unmarshal EventPayload_DelayInvokeCreateHook(%+v) error:%v", string(msg.Payload), err)
return
}
if payload.Resource == consts.ResourcesName_MailGlobal {
mailInfo := &model.GlobalMail{}
err = json.Unmarshal(payload.Obj, mailInfo)
if err != nil {
xlog.Warnf("unmarshal mail(%+v) error:%v", string(payload.Obj), err)
return
}
delayAt := payload.DelayAt
if delayAt.After(time.Now()) {
xlog.Infof("全服邮件[%+v]延迟到%v发送添加到全局定时器。。。", mailInfo, delayAt.Format(time.DateTime))
global.GLOB_TIMER.Add(&dtimer.Timer{
Key: fmt.Sprintf("create.global.mail.%v", mailInfo.ID),
Duration: delayAt.Sub(time.Now()),
Callback: func() {
_, projectEt, _, err := svc.projectRepo.GetById(payload.ProjectId)
if err != nil {
return
}
obj := new(entity.CommonResource).FromPo(mailInfo).ToCommonDto()
hook, ok := projects.GetProjectResourceHook(projectEt, payload.Resource).(projects.IPostResourceOpCreateHook)
if !ok {
return
}
err = hook.Create(projectEt, payload.Resource, obj)
if err != nil {
xlog.Errorf("invoke hook create resource:%v obj:%+v error:%v", payload.Resource, obj)
return
}
xlog.Infof("delay send global mail ok, mail info:%+v", mailInfo)
// 更新数据库延迟时间为NULL
resourceRepo := findCommResourceRepo(payload.Resource)
err = resourceRepo.Repo.UpdateClearDelayInvokeCreateHookFieldN(mailInfo.ID)
if err != nil {
xlog.Errorf("UpdateClearDelayInvokeCreateHookFieldN id:%v error:%v", mailInfo.ID)
}
},
})
}
}
}