package serviceGame import ( "context" "encoding/json" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "tyj_admin/api/v1/game" "tyj_admin/internal/model/entity" "tyj_admin/internal/serviceGame/internal" ) type IGameRole interface { GetGameRoleListSearch(ctx context.Context, req *game.RoleSearchReq) (res *game.RoleSearchRes, err error) GetRoleDetail(ctx context.Context, req *game.RoleDetailReq) (res *game.RoleDetailRes, err error) GetOnlineList(ctx context.Context, req *game.RoleOnlineReq) (res *game.RoleOnlineRes, err error) GetAccount(ctx context.Context, req *game.AccountReq) (res *game.AccountRes, err error) } type gameRoleImpl struct { } var gameRoleService = gameRoleImpl{} func GameRole() IGameRole { return &gameRoleService } // 获取玩家角色列表 func (s *gameRoleImpl) GetGameRoleListSearch(ctx context.Context, req *game.RoleSearchReq) (res *game.RoleSearchRes, err error) { res = new(game.RoleSearchRes) g.Try(ctx, func(ctx context.Context) { res.RoleList, err = internal.GetRoleList(ctx, req.Account) }) return } // 获取角色详情 func (s *gameRoleImpl) GetRoleDetail(ctx context.Context, req *game.RoleDetailReq) (res *game.RoleDetailRes, err error) { res = new(game.RoleDetailRes) g.Try(ctx, func(ctx context.Context) { res.RoleDetail, err = internal.GetRoleDetail(ctx, req.Uid, req.Channel) }) return } func (m *gameRoleImpl) GetOnlineList(ctx context.Context, req *game.RoleOnlineReq) (res *game.RoleOnlineRes, err error) { res = new(game.RoleOnlineRes) mqttMsg := internal.MqttOnlineReq{1, "onlineUser"} js, err := json.Marshal(mqttMsg) connectCh := make(chan *internal.MqttOnlineRes) defer close(connectCh) server := "192.168.2.100:3005" internal.SendMqttOnline(js, connectCh, server) var result *internal.MqttOnlineRes for { select { case result = <-connectCh: if result.Error != nil { err = gerror.New("失败") return } else { for _, v := range result.Body { for _, login := range v.LoginedList { info := new(entity.Online) info.ConnectId = v.ServerId info.Uid = login.Uid info.LoginTime = login.LoginTime info.Address = login.Address res.Onlines = append(res.Onlines, info) } } return } } } return } func (m *gameRoleImpl) GetAccount(ctx context.Context, req *game.AccountReq) (res *game.AccountRes, err error) { res = new(game.AccountRes) res.Accounts, err = internal.GetAccountList(ctx, req.Account, req.Tel, req.Ident, req.Name) return }