package group_ev import ( "hilo-user/_const" "hilo-user/domain" "hilo-user/domain/event" "hilo-user/myerr" "hilo-user/resource/mysql" ) var groupInListen = new(event.Base) // 进房事件 type GroupInEvent struct { GroupId string // imGroupId UserId mysql.ID ExternalId string Nick string Avatar string IsMember bool //是否永久成员 IsVip bool NobleLevel uint16 } func AddGroupInEventSync(callback func(model *domain.Model, event interface{}) error) { groupInListen.SyncList = append(groupInListen.SyncList, callback) } func AddGroupInEventAsync(callback func(model *domain.Model, event interface{}) error) { groupInListen.AsyncList = append(groupInListen.AsyncList, callback) } func PublishGroupInEvent(model *domain.Model, event interface{}) error { // 执行同步的领域事件 for _, callback := range groupInListen.SyncList { if err := callback(model, event); err != nil { return myerr.WrapErr(err) } } // 执行异步的领域事件 if len(groupInListen.AsyncList) > 0 { go func() { defer _const.CheckGoPanic() for _, callback := range groupInListen.AsyncList { // 异步事件需要用新model,主要是db var newModel = domain.CreateModelContext(model.MyContext) if err := callback(newModel, event); err != nil { model.Log.Errorf("GroupInEvent aysnc fail:%v", err) } } }() } return nil }