72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
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)
|
||
}
|
||
},
|
||
})
|
||
}
|
||
}
|
||
}
|