玩家管理模块接入redis,已完整实现好友、多人世界的跨服交互功能

This commit is contained in:
flswld
2022-12-29 22:42:57 +08:00
parent 0a2e13fad3
commit 6fd3d6a349
25 changed files with 1094 additions and 407 deletions

53
gs/dao/player_redis.go Normal file
View File

@@ -0,0 +1,53 @@
package dao
import (
"context"
"strconv"
"time"
"hk4e/gs/model"
"hk4e/pkg/logger"
"github.com/vmihailenco/msgpack/v5"
)
const RedisPlayerKeyPrefix = "HK4E"
func (d *Dao) GetRedisPlayerKey(userId uint32) string {
return RedisPlayerKeyPrefix + ":USER:" + strconv.Itoa(int(userId))
}
func (d *Dao) GetRedisPlayer(userId uint32) *model.Player {
playerData, err := d.redis.Get(context.TODO(), d.GetRedisPlayerKey(userId)).Result()
if err != nil {
logger.Error("get player from redis error: %v", err)
return nil
}
player := new(model.Player)
err = msgpack.Unmarshal([]byte(playerData), player)
if err != nil {
logger.Error("unmarshal player error: %v", err)
return nil
}
return player
}
func (d *Dao) SetRedisPlayer(player *model.Player) {
playerData, err := msgpack.Marshal(player)
if err != nil {
logger.Error("marshal player error: %v", err)
return
}
err = d.redis.Set(context.TODO(), d.GetRedisPlayerKey(player.PlayerID), playerData, time.Hour*24*30).Err()
if err != nil {
logger.Error("set player from redis error: %v", err)
return
}
}
func (d *Dao) SetRedisPlayerList(playerList []*model.Player) {
// TODO 换成redis批量命令执行
for _, player := range playerList {
d.SetRedisPlayer(player)
}
}