实现跨服加入世界&玩家跨服在线迁移功能(部分完成)

This commit is contained in:
flswld
2022-12-25 20:09:19 +08:00
parent 9feeb4eafa
commit c7ba154ab4
15 changed files with 437 additions and 136 deletions

View File

@@ -15,9 +15,10 @@ type SaveUserData struct {
}
type UserManager struct {
dao *dao.Dao
playerMap map[uint32]*model.Player
saveUserChan chan *SaveUserData
dao *dao.Dao
playerMap map[uint32]*model.Player
saveUserChan chan *SaveUserData
remotePlayerMap map[uint32]string // 远程玩家 key:userId value:玩家所在gs的appid
}
func NewUserManager(dao *dao.Dao) (r *UserManager) {
@@ -25,9 +26,36 @@ func NewUserManager(dao *dao.Dao) (r *UserManager) {
r.dao = dao
r.playerMap = make(map[uint32]*model.Player)
r.saveUserChan = make(chan *SaveUserData)
r.remotePlayerMap = make(map[uint32]string)
return r
}
func (u *UserManager) GetRemoteUserOnlineState(userId uint32) bool {
_, exist := u.remotePlayerMap[userId]
if !exist {
return false
} else {
return true
}
}
func (u *UserManager) GetRemoteUserGsAppId(userId uint32) string {
appId, exist := u.remotePlayerMap[userId]
if !exist {
return ""
} else {
return appId
}
}
func (u *UserManager) SetRemoteUserOnlineState(userId uint32, isOnline bool, appId string) {
if isOnline {
u.remotePlayerMap[userId] = appId
} else {
delete(u.remotePlayerMap, userId)
}
}
func (u *UserManager) GetUserOnlineState(userId uint32) bool {
player, exist := u.playerMap[userId]
if !exist {
@@ -119,6 +147,14 @@ func (u *UserManager) loadUserFromDb(userId uint32) *model.Player {
return player
}
func (u *UserManager) saveUserToDb(player *model.Player) {
err := u.dao.UpdatePlayer(player)
if err != nil {
logger.Error("update player error: %v", err)
return
}
}
func (u *UserManager) AddUser(player *model.Player) {
if player == nil {
return