From bc98f0b5be96a860fdc2efaa44a032cec36b8ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Tue, 5 Sep 2023 19:39:27 +0800 Subject: [PATCH] save --- server/imserver/friends.go | 1 + server/imserver/friendsdbmgr.go | 29 ++++++++++++++++++--------- server/imserver/friendsmgr.go | 35 ++++++++++++++------------------- server/imserver/guildmgr.go | 10 +++++----- 4 files changed, 41 insertions(+), 34 deletions(-) diff --git a/server/imserver/friends.go b/server/imserver/friends.go index a75d7316..daa683d8 100644 --- a/server/imserver/friends.go +++ b/server/imserver/friends.go @@ -19,6 +19,7 @@ type Friendship struct { type FriendRequest struct { accountId string isFriendship int32 // 0 pending, 1 ok, 2 reject, 3 disband + requestTime int32 // send time } // FriendBlackList 直接存列表, 黑名单上限就50个 diff --git a/server/imserver/friendsdbmgr.go b/server/imserver/friendsdbmgr.go index f6d8232a..22f9d5b3 100644 --- a/server/imserver/friendsdbmgr.go +++ b/server/imserver/friendsdbmgr.go @@ -118,11 +118,13 @@ func (fm *FriendsMgr) loadUsersResult(err error, rows *f5.DataSet) { fmt.Printf("loadUsersResult err:%v \n", err) return } - fm.users = make(map[string]*User, 100) + fm.users = make(map[string]*User) for rows.Next() { user := &User{ - accountId: q5.ToString(*rows.GetByIndex(0)), - username: q5.ToString(*rows.GetByIndex(1)), + accountId: q5.ToString(*rows.GetByIndex(0)), + username: q5.ToString(*rows.GetByIndex(1)), + friendRequest: make(map[string]*FriendRequest, MaxPendingFriendReqs), + friendBlackList: make(map[string]*FriendBlackList, MaxBlockedMembers), } fm.users[user.accountId] = user } @@ -153,17 +155,24 @@ func (fm *FriendsMgr) loadFriendshipsResult(err error, rows *f5.DataSet) { if user1 == nil || user2 == nil { continue } - friendship := &Friendship{} - friendship.user1 = user1 - friendship.user2 = user2 - fm.addFriendshipToMap(user1.accountId, friendship) - fm.addFriendshipToMap(user2.accountId, friendship) + + // add user1 friendship + friendship1 := &Friendship{} + friendship1.user1 = user1 + friendship1.user2 = user2 + fm.addFriendshipToMap(user1.accountId, friendship1) + + // add user2 friendship + friendship2 := &Friendship{} + friendship2.user1 = user2 + friendship2.user2 = user1 + fm.addFriendshipToMap(user2.accountId, friendship2) } } // loadPendingRequests 加载等待验证好友请求 func (fm *FriendsMgr) loadPendingRequests() { - fields := []string{"sender_account_id", "receiver_account_id"} + fields := []string{"sender_account_id", "receiver_account_id", "createtime"} f5.GetJsStyleDb().Select( FRIEND_DB, "t_friend_pending_request", @@ -183,6 +192,7 @@ func (fm *FriendsMgr) loadPendingRequestsResult(err error, rows *f5.DataSet) { for rows.Next() { senderAccountId := q5.ToString(*rows.GetByIndex(0)) receiverAccountId := q5.ToString(*rows.GetByIndex(1)) + requestTime := q5.ToInt32(*rows.GetByIndex(2)) user := fm.users[receiverAccountId] if user != nil { if user.friendRequest == nil { @@ -191,6 +201,7 @@ func (fm *FriendsMgr) loadPendingRequestsResult(err error, rows *f5.DataSet) { friendRequest := &FriendRequest{ accountId: senderAccountId, isFriendship: 0, + requestTime: requestTime, } user.friendRequest[receiverAccountId] = friendRequest } diff --git a/server/imserver/friendsmgr.go b/server/imserver/friendsmgr.go index 1fda8a1c..644e86f5 100644 --- a/server/imserver/friendsmgr.go +++ b/server/imserver/friendsmgr.go @@ -99,25 +99,23 @@ func (fm *FriendsMgr) addFriendRequest(account1Id string, account2Id string, cb found1 := user1.IsInBlacklist(account2Id) found2 := user2.IsInBlacklist(account1Id) - if found1 == true || found2 == true { + if found1 || found2 { cb(1, "xxx") } // 已发送请求 - if _, ok := user1.friendRequest[account2Id]; ok { + friendRequest, ok := user1.friendRequest[account2Id] + if ok && friendRequest.isFriendship == 1 { cb(1, "xxx") } - // 自己好友已满 - if fm.getFriendCount(account1Id) >= MaxFriendMembers { + // 好友已满 + if fm.getFriendCount(account1Id) >= MaxFriendMembers || fm.getFriendCount(account2Id) >= MaxFriendMembers { cb(1, "xxx") } - // 对方好友已满 - if fm.getFriendCount(account2Id) >= MaxFriendMembers { - cb(1, "xxx") - } - // 对方待请求已满 - if fm.getFriendRequestCount(account2Id) >= MaxPendingFriendReqs { + + // 待请求已满 + if fm.getFriendRequestCount(account1Id) >= MaxPendingFriendReqs || fm.getFriendRequestCount(account2Id) >= MaxPendingFriendReqs { cb(1, "xxx") } @@ -228,10 +226,11 @@ func (fm *FriendsMgr) deleteFriendShip(account1Id, account2Id string, cb func(er // getFriendCount 好友数量 func (fm *FriendsMgr) getFriendCount(accountId string) int { - if friends, ok := fm.friendships[accountId]; ok { - return len(friends) - } - return 0 + return len(fm.friendships[accountId]) + //if friends, ok := fm.friendships[accountId]; ok { + // return len(friends) + //} + //return 0 } // getFriendRequestCount 等待请求数量 @@ -245,7 +244,6 @@ func (fm *FriendsMgr) getFriendRequestCount(accountId string) int { // listFriend 我的好友列表 func (fm *FriendsMgr) listFriends(accountId string) []*User { - // By default, Users member data count:10 var users []*User for _, friendship := range fm.friendships[accountId] { if friendship.user1.accountId != accountId { @@ -313,11 +311,8 @@ func (fm *FriendsMgr) removeBlacklist(account1Id string, account2Id string, cb f } func (fm *FriendsMgr) addFriendshipToMap(accountID string, friendship *Friendship) { - if fm.friendships[accountID] == nil { - fm.friendships[accountID] = []*Friendship{friendship} - } else { - fm.friendships[accountID] = append(fm.friendships[accountID], friendship) - } + user1Friendships := fm.friendships[accountID] + user1Friendships = append(user1Friendships, friendship) } func (fm *FriendsMgr) clearExpiredCaches() { diff --git a/server/imserver/guildmgr.go b/server/imserver/guildmgr.go index a82928cb..02ea0d1d 100644 --- a/server/imserver/guildmgr.go +++ b/server/imserver/guildmgr.go @@ -191,7 +191,7 @@ func (gm *GuildMgr) Approve(operatorAccountId, accountId string, cb func(errCode } // 公会干部及以上仅可操作 - err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader) + err := gm.CheckOperatorPerm(operatorMember, GuildMemberLevelViceLeader) if err != nil { cb(1, "XXX") } @@ -244,7 +244,7 @@ func (gm *GuildMgr) Reject(operatorAccountId, accountId string, cb func(errCode cb(1, "XXX") } // 公会干部及以上仅可操作 - err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader) + err := gm.CheckOperatorPerm(operatorMember, GuildMemberLevelViceLeader) if err != nil { cb(1, "XXX") } @@ -324,7 +324,7 @@ func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(e } // 公会干部及以上仅可操作 - err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader) + err := gm.CheckOperatorPerm(operatorMember, GuildMemberLevelViceLeader) if err != nil { cb(1, "XXX") } @@ -560,9 +560,9 @@ func (gm *GuildMgr) RandomGuilds() []*Guild { return results } -func (gm *GuildMgr) checkOperatorPerm(operatorMember *GuildMember, level int) error { +func (gm *GuildMgr) CheckOperatorPerm(operatorMember *GuildMember, level int) error { if operatorMember.level > level { - return fmt.Errorf("checkOperatorPerm: no permission[%s-%d]", operatorMember.accountId, operatorMember.level) + return fmt.Errorf("CheckOperatorPerm: no permission[%s-%d]", operatorMember.accountId, operatorMember.level) } return nil }