package player import ( "f1-game/internal/component/redis" "f1-game/internal/constant" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" "f1-game/nodes/center/internal/db" ctime "github.com/cherry-game/cherry/extend/time" "github.com/cherry-game/cherry/net/parser/pomelo" ) type actorUID struct { pomelo.ActorBase } func (p *actorUID) OnInit() { p.Remote().Register(nameRemote.Player_BindUID, p.bindUID) p.Remote().Register(nameRemote.Player_UpdateLastPlayer, p.updateLastPlayer) } // bind 绑定并获取uid func (p *actorUID) bindUID(req *pb.User) { // save to db db.SaveUserBindTable(req) } // updateLastPlayer 更新玩家历史登录数据到redis func (p *actorUID) updateLastPlayer(req *pb.UpdateLastPlayer) { if req.PID < 1 || len(req.OpenID) < 1 { return } loginList := redis.Center.GetLastLoginPlayer(req.PID, req.OpenID) // update data for _, player := range loginList { if player.GameNodeID == req.GameNodeID { player.PlayerID = req.PlayerID player.PlayerIcon = req.Icon player.PlayerName = req.PlayerName player.PlayerLevel = req.PlayerLevel player.UpTime = ctime.Now().ToMillisecond() player.Power = req.Power } } // 如果超过上限,则删除 listLen := len(loginList) remain := listLen - constant.Player_LastMax if remain > 0 { loginList = loginList[:constant.Player_LastMax-1] } // save to redis key := redis.Center.BuildLastLoginKey(req.PID) redis.Center.HSetJSON(key, req.OpenID, loginList) // save to db // TODO 每次都会构造一个对象 table := &db.LastPlayerTable{ UID: req.UID, PID: req.PID, OpenID: req.OpenID, } table.UpdateList(loginList) table.Save() }