From 2f23b0be33d159f1548548788c06e1772054f2de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Tue, 26 Sep 2023 13:16:58 +0800 Subject: [PATCH] save --- server/imserver/cachemgr.go | 4 ++-- server/imserver/constant.go | 1 + server/imserver/friendsdbmgr.go | 5 +--- server/imserver/friendsmgr.go | 41 ++++++++++++++++++++++++++------- server/imserver/guild.go | 6 ++--- server/imserver/player.go | 12 ++++++++-- server/imserver/playermgr.go | 33 +++++++++++++++++--------- 7 files changed, 72 insertions(+), 30 deletions(-) diff --git a/server/imserver/cachemgr.go b/server/imserver/cachemgr.go index 40679daf..2ae451bc 100644 --- a/server/imserver/cachemgr.go +++ b/server/imserver/cachemgr.go @@ -10,8 +10,8 @@ type PlayerProfile struct { Avatar int32 // 头像 AvatarHead int32 // 头像框 Star int32 // 星星 - totalKills int32 // 总击杀数 - totalWinTimes int32 // 总赢数 + TotalKills int32 // 总击杀数 + TotalWinTimes int32 // 总赢数 Rank int32 // 排位赛段位 OnlineStatus int32 // 在线状态 LastLoginTime int32 // 上次登录时间 diff --git a/server/imserver/constant.go b/server/imserver/constant.go index 5adbb6c1..e3b33a0c 100644 --- a/server/imserver/constant.go +++ b/server/imserver/constant.go @@ -111,6 +111,7 @@ const ( ERR_CODE_SEARCH_USER_DB_FAIL = 11015 ERR_CODE_SEARCH_NO_RESULT = 11016 ERR_CODE_FRIEND_NO_EXISTS = 11017 + ERR_CODE_ALREADY_FRIEND = 11018 // Guild ERR_CODE_GUILD_NO_EXISTS = 12001 diff --git a/server/imserver/friendsdbmgr.go b/server/imserver/friendsdbmgr.go index 4a8cbcef..a3ec7f04 100644 --- a/server/imserver/friendsdbmgr.go +++ b/server/imserver/friendsdbmgr.go @@ -38,6 +38,7 @@ func (fm *FriendsMgr) upsertFriendShip(account1Id string, account2Id string, isF } func (fm *FriendsMgr) updateFriendShip(account1Id string, account2Id string, fields [][]string, cb func(error)) { + account1Id, account2Id = SwapAccountIds(account1Id, account2Id) where := [][]string{ {"account1_id", account1Id}, {"account2_id", account2Id}, @@ -147,7 +148,6 @@ func (fm *FriendsMgr) loadFriendships() { account2Id := q5.ToString(*rows.GetByIndex(1)) isFriendship := q5.ToInt32(*rows.GetByIndex(2)) requestTime := q5.ToInt64(*rows.GetByIndex(3)) - // 检查用户是否已经存在,如果不存在则创建 user1, exists1 := userMap[account1Id] if !exists1 { @@ -175,9 +175,6 @@ func (fm *FriendsMgr) loadFriendships() { RequestTime: requestTime, } user2.Friendships[account1Id] = friendship2 - // 加载用户配置信息 - //cacheMgr.LoadPlayerProfile(user1, func(playerProfile *PlayerProfile) {}) - //cacheMgr.LoadPlayerProfile(user2, func(playerProfile *PlayerProfile) {}) } }, ) diff --git a/server/imserver/friendsmgr.go b/server/imserver/friendsmgr.go index 36fc1144..a9501982 100644 --- a/server/imserver/friendsmgr.go +++ b/server/imserver/friendsmgr.go @@ -75,11 +75,17 @@ func (fm *FriendsMgr) AddFriendRequest(account1Id string, account2Id string, cb // return //} - // 已发送请求 + // 检查已发送请求 friendship, exists := user1.Friendships[account2Id] - if exists && friendship.IsFriendship == 0 { - cb(ERR_CODE_OK, "AddFriendRequest ok") - return + if exists { + if friendship.IsFriendship == 0 { + cb(ERR_CODE_OK, "AddFriendRequest ok") + return + } + if friendship.IsFriendship == 1 { + cb(ERR_CODE_ALREADY_FRIEND, "Already a friend") + return + } } // 好友已满 @@ -105,9 +111,6 @@ func (fm *FriendsMgr) AddFriendRequest(account1Id string, account2Id string, cb user1.AddFriendRequest(account2Id, FriendshipStatusPending, requestTime) user2.AddFriendRequest(account1Id, FriendshipStatusPending, requestTime) - // Load user2 profile to cache - // cacheMgr.LoadPlayerProfile(user2, func(playerProfile *PlayerProfile) {}) - cb(ERR_CODE_OK, "AddFriendRequest ok") }) } @@ -120,10 +123,15 @@ func (fm *FriendsMgr) AcceptFriendRequest(account1Id string, account2Id string, user2 = fm.LoadUser(account2Id) } - if !user1.IsInReq(account2Id) { + friendship, exists := user1.Friendships[account2Id] + if !exists { cb(ERR_CODE_NO_IN_REQ, "AcceptFriendRequest user2 no in user1 pending request") return } + if friendship.IsFriendship != 0 { + cb(ERR_CODE_ALREADY_FRIEND, "Already a friend") + return + } if fm.GetFriendCount(account1Id) >= MaxFriendMembers || fm.GetFriendCount(account2Id) >= MaxFriendMembers { cb(ERR_CODE_USERS_IS_FULL, "AcceptFriendRequest users is full") @@ -167,6 +175,16 @@ func (fm *FriendsMgr) RejectFriendRequest(account1Id string, account2Id string, return } + friendship, exists := user1.Friendships[account2Id] + if !exists { + cb(ERR_CODE_NO_IN_REQ, "AcceptFriendRequest user2 no in user1 pending request") + return + } + if friendship.IsFriendship == 1 { + cb(ERR_CODE_ALREADY_FRIEND, "Already a friend") + return + } + requestTime := time.Now().Unix() fm.upsertFriendShip(account2Id, account1Id, FriendshipStatusReject, requestTime, func(err error) { if err != nil { @@ -191,6 +209,13 @@ func (fm *FriendsMgr) DeleteFriendShip(account1Id, account2Id string, cb func(er cb(ERR_CODE_USERS_NO_EXISTS, "DeleteFriendShip user no exists") return } + + friendship, exists := user1.Friendships[account2Id] + if !exists || friendship.IsFriendship != 1 { + cb(ERR_CODE_FRIEND_NO_EXISTS, "DeleteFriendShip user no exists") + return + } + user1.RemoveFriendShip(account2Id) user2.RemoveFriendShip(account1Id) diff --git a/server/imserver/guild.go b/server/imserver/guild.go index 9dbe3d93..64642bd2 100644 --- a/server/imserver/guild.go +++ b/server/imserver/guild.go @@ -16,9 +16,9 @@ type Guild struct { Notice string // 公告 JoinCond int32 // 公会加入条件 JoinCondValue int32 // 公会加入条件值 - TotalStars int32 // 公会统计信息, 总星星数量 - TotalKills int32 // 公会统计信息, 单局总击杀数 - ChickenDinners int32 // 公会统计信息, 单局第一名数 + TotalStars int32 // 公会统计信息, 总星星数量 从api获取 + TotalKills int32 // 公会统计信息, 单局总击杀数 从api获取 + ChickenDinners int32 // 公会统计信息, 单局第一名数 从api获取 MaxMembers int32 // 公会最大成员数 default 30 Members map[string]*GuildMember // accountId -> GuildMember PendingReqs map[string]int32 // pendingAccountId -> status 0,1,2,3 pending, accept, reject, leave diff --git a/server/imserver/player.go b/server/imserver/player.go index 7b587317..1294da7e 100644 --- a/server/imserver/player.go +++ b/server/imserver/player.go @@ -748,6 +748,8 @@ func (p *Player) FillMFGuildMember(member *GuildMember) *cs.MFGuildMember { func (p *Player) FillMFGuild(guild *Guild) *cs.MFGuild { // 总星星数 var totalStar int32 = 0 + var totalKills int32 = 0 + var totalWinTimes int32 = 0 var guildMembers []*cs.MFGuildMember for _, member := range guild.Members { @@ -757,6 +759,12 @@ func (p *Player) FillMFGuild(guild *Guild) *cs.MFGuild { } guildMembers = append(guildMembers, guildMember) totalStar += guildMember.GetStar() + + profile := cacheMgr.GetPlayerProfile(member.AccountId) + if profile != nil { + totalKills += profile.TotalKills + totalWinTimes += profile.TotalWinTimes + } } var resGuild *cs.MFGuild @@ -770,8 +778,8 @@ func (p *Player) FillMFGuild(guild *Guild) *cs.MFGuild { JoinCond: &guild.JoinCond, JoinCondValue: &guild.JoinCondValue, TotalStars: &totalStar, - TotalKills: &guild.TotalKills, - ChickenDinners: &guild.ChickenDinners, + TotalKills: &totalKills, + ChickenDinners: &totalWinTimes, MaxMembers: &guild.MaxMembers, Members: guildMembers, } diff --git a/server/imserver/playermgr.go b/server/imserver/playermgr.go index 0f783d00..b249108e 100644 --- a/server/imserver/playermgr.go +++ b/server/imserver/playermgr.go @@ -74,7 +74,7 @@ func (this *PlayerMgr) unInit() { func (this *PlayerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) { params := map[string]string{ "c": "User", - "a": "info", + "a": "detailInfo", "account_id": msg.GetAccountId(), "session_id": msg.GetSessionId(), "target_id": msg.GetAccountId(), @@ -88,20 +88,25 @@ func (this *PlayerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) { }) } +type HistorySeasons struct { + TotalKills int `json:"total_kills"` + WinTimes int `json:"win_times"` +} + func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCliResponse) { resObj := struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` Info struct { - Activated string `json:"activated"` - RenameCount string `json:"rename_count"` - 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:"rank"` - LastLoginTime string `json:"last_login_time"` + 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) @@ -122,7 +127,6 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt // Add to online user this.addPlayer(&player) this.addSocketHash(hdr.GetSocket(), &player) - // Add player profile playerProfile := &PlayerProfile{ AccountId: accountId, @@ -134,6 +138,13 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt OnlineStatus: OnlineStatus, 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 + } cacheMgr.AddCacheProfile(1, playerProfile) friendMgr.LoadUser(accountId)