This commit is contained in:
殷勇 2023-09-27 11:30:57 +08:00
parent 38e61da642
commit 8523be30e8
5 changed files with 82 additions and 79 deletions

View File

@ -86,7 +86,7 @@ func (cm *CacheMgr) LoadFromDB() {
}
func (cm *CacheMgr) loadUserProfile(accountId string) {
//select a.account_id, a.name, a.head_id, a.head_frame, a.star_num, a.`rank`, a.last_login_time
// "account_id", "name", "head_id", "head_frame", "star_num", "rank", "last_login_time"
sql := fmt.Sprintf("select * from t_user where account_id='%s'", accountId)
f5.GetGoStyleDb().SyncSelectCustomQuery(
GAME_DB,
@ -109,43 +109,14 @@ func (cm *CacheMgr) loadUserProfile(accountId string) {
LastLoginTime: q5.ToInt32(*rows.GetByName("last_login_time")),
OnlineStatus: onlineStatus,
}
cm.AddCacheProfile(1, profile)
cm.AddPlayerProfile(1, profile)
}
},
)
}
func (cm *CacheMgr) GetProfileByAccountId(accountId string, cb func(err error, profile *PlayerProfile)) {
fields := []string{"account_id", "name", "head_id", "head_frame", "star_num", "rank", "last_login_time"}
where := [][]string{
{"account_id", accountId},
}
f5.GetJsStyleDb().SelectOne(
GAME_DB,
"t_user",
fields,
where,
func(err error, rows *f5.DataSet) {
if err != nil {
cb(err, nil)
return
}
if rows.Next() {
aId := q5.ToString(*rows.GetByIndex(0))
onlineStatue := playerMgr.GetOnlineStatus(aId)
profile := &PlayerProfile{
AccountId: q5.ToString(*rows.GetByIndex(0)),
Username: q5.ToString(*rows.GetByIndex(1)),
Avatar: q5.ToInt32(*rows.GetByIndex(2)),
AvatarHead: q5.ToInt32(*rows.GetByIndex(3)),
Star: q5.ToInt32(*rows.GetByIndex(4)),
Rank: q5.ToInt32(*rows.GetByIndex(5)),
LastLoginTime: q5.ToInt32(*rows.GetByIndex(6)),
OnlineStatus: onlineStatue,
}
cb(nil, profile)
}
cb(fmt.Errorf("no rows"), nil)
},
)
cm.loadUserProfile(accountId)
profile := cm.GetPlayerProfile(accountId)
cb(nil, profile)
}

View File

@ -51,13 +51,6 @@ func (cm *CacheMgr) init() {
func (cm *CacheMgr) UnInit() {
}
func (cm *CacheMgr) GetPlayerProfile(accountId string) *PlayerProfile {
if profile, exists := cm.cachePlayerProfiles[accountId]; exists {
return profile.data
}
return nil
}
func (cm *CacheMgr) SyncGetUsers(accountIds []string, cb func(bool)) {
}
@ -74,7 +67,6 @@ func (cm *CacheMgr) AsyncGetUsers(accountIds []string, cb func(bool)) {
cm.cacheMutex.Lock()
_, exists := cm.cachePlayerProfiles[accountId]
cm.cacheMutex.Unlock()
if exists {
mu.Lock()
successCount++
@ -82,20 +74,10 @@ func (cm *CacheMgr) AsyncGetUsers(accountIds []string, cb func(bool)) {
return
}
cm.GetProfileByAccountId(accountId, func(err error, playerProfile *PlayerProfile) {
if err != nil {
cb(false)
return
}
cm.cacheMutex.Lock()
cm.AddCacheProfile(1, playerProfile)
cm.cacheMutex.Unlock()
mu.Lock()
successCount++
mu.Unlock()
})
cm.loadUserProfile(accountId)
mu.Lock()
successCount++
mu.Unlock()
}(accountId)
}
@ -107,24 +89,16 @@ func (cm *CacheMgr) AsyncGetUsers(accountIds []string, cb func(bool)) {
}
}
func (cm *CacheMgr) LoadPlayerProfile(user *User, cb func(*PlayerProfile)) {
if profile, exists := cm.cachePlayerProfiles[user.AccountId]; exists {
cb(profile.data)
return
}
cm.GetProfileByAccountId(user.AccountId, func(err error, profile *PlayerProfile) {
if err != nil {
cb(nil)
return
}
cm.cachePlayerProfiles[user.AccountId].data = profile
cb(profile)
})
}
func (cm *CacheMgr) AddCacheProfile(version int, playerProfile *PlayerProfile) {
func (cm *CacheMgr) AddPlayerProfile(version int, playerProfile *PlayerProfile) {
cm.cachePlayerProfiles[playerProfile.AccountId] = &CachePlayerProfile{
version: version,
data: playerProfile,
}
}
func (cm *CacheMgr) GetPlayerProfile(accountId string) *PlayerProfile {
if profile, exists := cm.cachePlayerProfiles[accountId]; exists {
return profile.data
}
return nil
}

View File

@ -212,7 +212,7 @@ func (fm *FriendsMgr) loadUserFriendships(user *User, where [][]string) {
RequestTime: requestTime,
}
user2.Friendships[account1Id] = friendship2
cacheMgr.LoadPlayerProfile(user2, func(playerProfile *PlayerProfile) {})
cacheMgr.loadUserProfile(account2Id)
}
if user.AccountId == account2Id {
@ -224,7 +224,7 @@ func (fm *FriendsMgr) loadUserFriendships(user *User, where [][]string) {
RequestTime: requestTime,
}
user.Friendships[account1Id] = friendship
cacheMgr.LoadPlayerProfile(friendUser, func(playerProfile *PlayerProfile) {})
cacheMgr.loadUserProfile(account1Id)
}
}
},

View File

@ -368,10 +368,6 @@ func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string, cb func(errCode in
gm.AddUserGuild(accountId, guildId)
cb(ERR_CODE_OK, "ApplyToGuild OK", guild)
user := friendMgr.GetUser(accountId)
cacheMgr.LoadPlayerProfile(user, func(playerProfile *PlayerProfile) {})
// Add event
prop := make(map[string]string)
prop["guild_id"] = q5.ToString(guild.GuildId)

View File

@ -145,7 +145,7 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt
playerProfile.TotalKills = 0
playerProfile.TotalWinTimes = 0
}
cacheMgr.AddCacheProfile(1, playerProfile)
cacheMgr.AddPlayerProfile(1, playerProfile)
friendMgr.LoadUser(accountId)
serverInfo := proto.String(mt.Table.IMCluster.GetServerInfo())
@ -231,3 +231,65 @@ func (this *PlayerMgr) CMReconnect(hdr *f5.MsgHdr, msg *cs.CMReconnect) {
hum.ReBind(hdr.GetSocket())
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
}
// GetRemotePlayerInfo TODO 优化
func (this *PlayerMgr) GetRemotePlayerInfo(player *Player, cb func(errCode int32, errMsg string, p *PlayerProfile)) {
params := map[string]string{
"c": "User",
"a": "detailInfo",
"account_id": player.GetAccountId(),
"session_id": player.GetSessionId(),
"target_id": player.GetAccountId(),
}
url := fmt.Sprintf("%s/webapp/index.php", mt.Table.Config.GetById(0).GetGameapiUrl())
f5.GetSysLog().Info("GetPlayerInfo url:%s, params:%+v\n", url, params)
f5.GetHttpCliMgr().SendJsStyleRequest(
url,
params,
func(rsp f5.HttpCliResponse) {
resObj := struct {
ErrCode int32 `json:"errcode"`
ErrMsg string `json:"errmsg"`
Info struct {
Activated string `json:"activated"`
AccountId string `json:"account_id"`
Name string `json:"name"`
Avatar string `json:"head_id"`
AvatarHead string `json:"head_frame"`
Star string `json:"current_star_num"`
Rank string `json:"current_rank"`
LastLoginTime string `json:"last_login_time"`
HistorySeasons []HistorySeasons `json:"history_seasons"`
} `json:"info"`
}{}
err := json.Unmarshal([]byte(rsp.GetRawData()), &resObj)
if err != nil {
cb(ERR_CODE_GUILD_SETNAME_API_ERROR, "SetNameConsume Api服务器JSON解析错误", nil)
f5.GetSysLog().Info("SetNameConsume Api服务器JSON解析错误:%s\n", err)
return
}
if resObj.ErrCode != 0 {
cb(resObj.ErrCode, "Api服务器errcode", nil)
f5.GetSysLog().Error("Api服务器errcode:%d", resObj.ErrCode)
return
}
playerProfile := &PlayerProfile{
AccountId: resObj.Info.AccountId,
Username: resObj.Info.Name,
Avatar: q5.ToInt32(resObj.Info.Avatar),
AvatarHead: q5.ToInt32(resObj.Info.AvatarHead),
Star: q5.ToInt32(resObj.Info.Star),
Rank: q5.ToInt32(resObj.Info.Rank),
OnlineStatus: this.GetOnlineStatus(resObj.Info.AccountId),
LastLoginTime: q5.ToInt32(resObj.Info.LastLoginTime),
}
if len(resObj.Info.HistorySeasons) == 1 {
playerProfile.TotalKills = q5.ToInt32(resObj.Info.HistorySeasons[0].TotalKills)
playerProfile.TotalWinTimes = q5.ToInt32(resObj.Info.HistorySeasons[0].WinTimes)
} else {
playerProfile.TotalKills = 0
playerProfile.TotalWinTimes = 0
}
cb(resObj.ErrCode, resObj.ErrMsg, playerProfile)
})
}