package event_s import ( "errors" "hilo-user/_const/enum/user_e" "hilo-user/domain" "hilo-user/domain/event/group_ev" "hilo-user/domain/event/user_ev" "hilo-user/domain/model/groupPower_m" "hilo-user/domain/model/group_m" "hilo-user/domain/model/user_m" "hilo-user/domain/service/user_s" "hilo-user/mycontext" "hilo-user/req/jwt" "hilo-user/resource/config" "hilo-user/resource/mysql" ) func EventInit() { GroupInEvents() GameEventInit() GroupLeaveEvents() ModelFuncInit() } // 用户进房事件 func GroupInEvents() { group_ev.AddGroupInEventSync(func(model *domain.Model, event interface{}) error { e, ok := event.(*group_ev.GroupInEvent) if !ok { model.Log.Errorf("AddGroupInEventSync event type err") return nil } txGroupId, err := group_m.ToTxGroupId(model, e.GroupId) if err != nil { model.Log.Errorf("AddGroupInEventSync err:%v, imGroupId:%v", err, e.GroupId) return nil } return user_s.NewGameService(mycontext.CreateMyContext(model.Cxt)).PushGameInfo("", e.ExternalId, txGroupId, 0) }) } // 用户退房事件 func GroupLeaveEvents() { group_ev.AddGroupLeaveEventAsync(func(model *domain.Model, event interface{}) error { e, ok := event.(*group_ev.GroupLeaveEvent) if !ok || e == nil { model.Log.Errorf("AddGroupLeaveEventAsync event type err") return nil } txGroupId, err := group_m.ToTxGroupId(model, e.GroupId) if err != nil { model.Log.Errorf("ToTxGroupId fail:%v-%v", e.GroupId, err) } if err := user_s.NewGameService(model.MyContext).GameOpt(e.UserId, 0, "", e.ExternalId, "", "", txGroupId, user_e.GameOptExit, 0, false); err != nil { model.Log.Warnf("AddGroupLeaveEventAsync GameOpt fail,e%v,err:%v", *e, err) } return nil }) } // 游戏上报事件 func GameEventInit() { user_ev.AddReportGameInfoEventSync(func(model *domain.Model, event interface{}) error { e, ok := event.(*user_ev.ReportGameInfoEvent) if !ok { model.Log.Errorf("AddReportGameInfoEventSync 消息类型错误!event:%+v", event) return nil } switch e.ReportType { case user_e.ReportTypeGameStart: // 更新游戏信息 return user_s.NewGameService(model.MyContext).GameStart(e.GameStartObject) //return user_m.GameStartUpdate(model, e.GameStartObject) case user_e.ReportTypeGameSettle: return user_s.NewGameService(model.MyContext).GameSettle(e.GameSettleObject) } return nil }) } func ModelFuncInit() { group_m.GetGroupPowerNameByUserId = func(model *domain.Model, userId uint64) (uint64, string, error) { return groupPower_m.GetUserGroupPower(model, userId) } // 编辑游戏-清理机器人 user_ev.AddGameEditEventAsync(func(model *domain.Model, event interface{}) error { e, ok := event.(*user_ev.GameEditEvent) if !ok { return errors.New("GameEditEvent asset fail") } robots, err := user_m.GetRoomRobots(model, e.TxGroupId) if err != nil { model.Log.Errorf("GetRoomRobots fail:%v", err) return err } model.Log.Infof("AddGameEditEventAsync event:%v,robots:%v", *e, robots) var userIds []mysql.ID for _, robot := range robots { userIds = append(userIds, robot.UserId) } users, err := user_m.GetUserMapByIds(model, userIds) if err != nil { model.Log.Errorf("GetUserMapByIds fail:%v", err) return err } userService := user_s.NewGameService(model.MyContext) for i, robot := range robots { user, ok := users[robot.UserId] if !ok { model.Log.Errorf("robot userId not exits:%v", robot) continue } // filled robots[i].GameOpt = userService.GameOpt // service func -> model func robots[i].User = users[robot.UserId] // user info robots[i].Token, _ = jwt.GenerateToken(user.ID, user.ExternalId, config.GetConfigJWT().ISSUER_API) // jwt // 离开 robots[i].Leave("GameEdit") } return nil }) }