| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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()
- }
|