From 6b9bcbaed1d1dffcd67096c0f9b87f21c493f8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Tue, 5 Sep 2023 17:34:51 +0800 Subject: [PATCH] save --- server/imserver/guildmgr.go | 69 ++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/server/imserver/guildmgr.go b/server/imserver/guildmgr.go index eeaf3451..a82928cb 100644 --- a/server/imserver/guildmgr.go +++ b/server/imserver/guildmgr.go @@ -213,13 +213,13 @@ func (gm *GuildMgr) Approve(operatorAccountId, accountId string, cb func(errCode } newMember := &GuildMember{accountId: accountId, level: GuildMemberLevelDefault} - guild.AddMember(newMember) - gm.upsertGuildMember(guildId, newMember, func(err error) { if err != nil { cb(1, "xxx") return } + guild.AddMember(newMember) + gm.AddUserGuild(accountId, guildId) gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined, func(err error) { logContent := fmt.Sprintf("Approve[operator:%s]", operatorAccountId) gm.WriteLog(guildId, accountId, LogTypeApprove, logContent) @@ -267,10 +267,13 @@ func (gm *GuildMgr) Reject(operatorAccountId, accountId string, cb func(errCode // JoinGuild 直接加入公会 func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string) { newMember := GuildMember{accountId: accountId, level: GuildMemberLevelDefault} - guild.AddMember(&newMember) guildId := guild.guildId gm.upsertGuildMember(guildId, &newMember, func(err error) { + if err != nil { + guild.AddMember(&newMember) + gm.AddUserGuild(accountId, guildId) + } }) } @@ -288,15 +291,19 @@ func (gm *GuildMgr) LeaveGuild(accountId string, cb func(errCode int32, errMsg s cb(1, "XXX") } - guild.RemoveMember(accountId) fields := [][]string{{"is_leave_guild", q5.ToString(1)}} gm.updateGuildMember(guild, member.accountId, fields, func(err error) { if err != nil { - logContent := fmt.Sprintf("LeaveGuild[%d-%s]", guild.guildId, accountId) - gm.WriteLog(guild.guildId, accountId, LogTypeLeave, logContent) - cb(0, "") + cb(1, err.Error()) } + + guild.RemoveMember(accountId) + gm.RemoveUserGuild(accountId) + // Add logs + logContent := fmt.Sprintf("LeaveGuild[%d-%s]", guild.guildId, accountId) + gm.WriteLog(guild.guildId, accountId, LogTypeLeave, logContent) + cb(0, "") }) } @@ -330,10 +337,17 @@ func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(e if dismissMember.level <= operatorMember.level { cb(1, "XXX") } - guild.RemoveMember(accountId) fields := [][]string{{"is_leave_guild", q5.ToString(1)}} gm.updateGuildMember(guild, dismissMember.accountId, fields, func(err error) { + if err != nil { + cb(1, err.Error()) + return + } + + guild.RemoveMember(accountId) + gm.RemoveUserGuild(accountId) + // Add logs logContent := fmt.Sprintf("DismissMember[%d-%s-%s]", guild.guildId, operatorAccountId, accountId) gm.WriteLog(guild.guildId, accountId, LogTypeDismiss, logContent) cb(0, "") @@ -370,9 +384,14 @@ func (gm *GuildMgr) PromoteMember(operatorAccountId, accountId string, cb func(e cb(1, "XXX") } - member.level = GuildMemberLevelViceLeader fields := [][]string{{"level", q5.ToString(GuildMemberLevelViceLeader)}} gm.updateGuildMember(guild, member.accountId, fields, func(err error) { + if err != nil { + cb(1, err.Error()) + return + } + + member.level = GuildMemberLevelViceLeader logContent := fmt.Sprintf("PromoteMember[%d-%s-%s]", guild.guildId, operatorAccountId, accountId) gm.WriteLog(guild.guildId, accountId, LogTypeDismiss, logContent) cb(0, "") @@ -404,9 +423,14 @@ func (gm *GuildMgr) DemoteMember(operatorAccountId, accountId string, cb func(er cb(1, "XXX") } - member.level = GuildMemberLevelDefault fields := [][]string{{"level", q5.ToString(GuildMemberLevelDefault)}} gm.updateGuildMember(guild, member.accountId, fields, func(err error) { + if err != nil { + cb(1, err.Error()) + return + } + + member.level = GuildMemberLevelDefault logContent := fmt.Sprintf("DemoteMember[%d-%s-%s]", guild.guildId, operatorAccountId, accountId) gm.WriteLog(guild.guildId, accountId, LogTypeDismiss, logContent) cb(0, "") @@ -438,10 +462,12 @@ func (gm *GuildMgr) Disband(operatorAccountId string, cb func(errCode int32, err logContent := fmt.Sprintf("GuildDisbanded[%d-%s]", guildId, guildName) gm.WriteLog(guildId, operatorAccountId, LogTypeDisband, logContent) - guild.members = nil - gm.guilds[guildId] = nil - gm.guildLogs[guildId] = nil + // delete user guilds + for _, member := range guild.members { + delete(gm.userGuilds, member.accountId) + } + guild.members = nil delete(gm.guilds, guildId) delete(gm.guildLogs, guildId) gm.RemoveGuild(guildId) @@ -462,15 +488,16 @@ func (gm *GuildMgr) SetNotice(operatorAccountId string, notice *string, cb func( cb(1, "XXX") } - guild.SetNotice(notice) updateFields := [][]string{ {"notice", *notice}, } gm.updateGuild(guild, updateFields, func(err error) { - if err == nil { - cb(0, "") + if err != nil { + cb(1, err.Error()) + return } - cb(1, err.Error()) + guild.SetNotice(notice) + cb(0, "") }) } @@ -545,6 +572,14 @@ func (gm *GuildMgr) ExistsGuild(guildId int64) bool { return ok } +func (gm *GuildMgr) AddUserGuild(accountId string, guildId int64) { + gm.userGuilds[accountId] = guildId +} + +func (gm *GuildMgr) RemoveUserGuild(accountId string) { + delete(gm.userGuilds, accountId) +} + func (gm *GuildMgr) AddGuild(guildId int64, guild *Guild) { if _, exists := gm.guilds[guildId]; !exists { gm.guilds[guildId] = guild