This commit is contained in:
殷勇 2023-09-05 19:39:27 +08:00
parent 6b9bcbaed1
commit bc98f0b5be
4 changed files with 41 additions and 34 deletions

View File

@ -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个

View File

@ -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
}

View File

@ -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() {

View File

@ -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
}