game_edit.go 1.43 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
package user_ev

import (
	"hilo-user/_const"
	"hilo-user/domain"
	"hilo-user/domain/event"
	"hilo-user/resource/mysql"
)

//注册监听
var userEditEvent = new(event.Base)

/**
  注册事件
*/
type GameEditEvent struct {
	GameId    mysql.ID  `json:"userId"`    // 游戏id
	TxGroupId mysql.Str `json:"txGroupId"` // 群组id
}

//添加领域事件,在每个领域模型中init中添加,因为这是静态业务,非动态的。
func AddGameEditEventSync(callback func(model *domain.Model, event interface{}) error) {
	userEditEvent.SyncList = append(userEditEvent.SyncList, callback)
}

//加入到异步操作中
func AddGameEditEventAsync(callback func(model *domain.Model, event interface{}) error) {
	userEditEvent.AsyncList = append(userEditEvent.AsyncList, callback)
}

//领域事件发布
func PublishGameEditEvent(model *domain.Model, event interface{}) error {
	//执行同步的领域事件
	for _, callback := range userEditEvent.SyncList {
		if err := callback(model, event); err != nil {
			return err
		}
	}
	// 执行异步的领域事件
	if len(userEditEvent.AsyncList) > 0 {
		go func() {
			defer _const.CheckGoPanic()
			for _, callback := range userEditEvent.AsyncList {
				// 异步事件需要用新model,主要是db
				var newModel = domain.CreateModelContext(model.MyContext)
				if err := callback(newModel, event); err != nil {
					model.Log.Errorf("userEditEvent aysnc fail:%v", err)
				}
			}
		}()
	}
	return nil
}