From 6cce01860c1e13d2067a056029c75e6ec0d770df Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 8 Apr 2024 15:15:14 +0800 Subject: [PATCH] 1 --- server/imserver_new/guild/guild.go | 47 +++++++++++++++++++++ server/imserver_new/guild/guildmgr.go | 59 ++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/server/imserver_new/guild/guild.go b/server/imserver_new/guild/guild.go index 4c7238c6..6c757bbc 100644 --- a/server/imserver_new/guild/guild.go +++ b/server/imserver_new/guild/guild.go @@ -5,6 +5,7 @@ import ( "f5" "cs" "github.com/golang/protobuf/proto" + "main/constant" . "main/global" ) @@ -56,6 +57,14 @@ func (this *guild) getMember(accountId string) *member { return nil } +func (this *guild) traverseMembers(cb func(*member) bool) { + for _, m := range(this.idHash) { + if !cb(m) { + break + } + } +} + func (this *guild) isOwner(accountId string) bool { if this.getMember(accountId) == nil { return false @@ -63,6 +72,44 @@ func (this *guild) isOwner(accountId string) bool { return this.ownerId == accountId } +func (this *guild) disband() { + { + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild_member", + [][]string{ + {"deleted", "1"}, + }, + [][]string{ + {"guild_id", this.guildId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + }) + } + { + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild_apply", + [][]string{ + {"deleted", "1"}, + }, + [][]string{ + {"guild_id", this.guildId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + }) + } + { + delete(_guildMgr.idHash, this.guildId) + delete(_guildMgr.nameHash, this.guildName) + this.traverseMembers( + func (m *member) bool { + delete(_guildMgr.memberIdHash, m.memberId) + return true + }) + } +} + func (this *guild) AsyncFillMFGuild(pbGuild *cs.MFGuild, cb func(int32, string)) { pbGuild.AutoId = proto.Int64(0) pbGuild.GuildId = proto.Int64(q5.ToInt64(this.guildId)) diff --git a/server/imserver_new/guild/guildmgr.go b/server/imserver_new/guild/guildmgr.go index c2552b63..24bfde68 100644 --- a/server/imserver_new/guild/guildmgr.go +++ b/server/imserver_new/guild/guildmgr.go @@ -469,7 +469,64 @@ func (this *guildMgr) AsyncKickout(accountId string, targetId string, cb func(in } func (this *guildMgr) AsyncDisband(accountId string, cb func(int32, string, []string)) { - + members := []string{} + keys := [][]string{} + { + guild := this.internalGetGuildByAccountId(accountId) + if guild == nil { + cb(0, "", members) + return + } + if !guild.isOwner(accountId) { + cb(1, "Disband only leader perm", members) + return + } + keys = [][]string{ + {constant.GUILD_ID_LOCK_KEY, guild.guildId}, + {constant.GUILD_NAME_LOCK_KEY, guild.guildName}, + }; + guild.traverseMembers( + func (m *member) bool { + q5.AppendSlice(&keys, []string{constant.GUILD_MEMBER_LOCK_KEY, m.memberId}) + q5.AppendSlice(&members, m.memberId) + return true + }) + } + f5.NewLockAsyncTask( + keys, + func (task *f5.LockAsyncTask) { + guild := this.internalGetGuildByAccountId(accountId) + members := []string{} + if guild == nil { + task.SetSucc() + cb(0, "", members) + return + } + if !guild.isOwner(accountId) { + task.SetFail() + cb(1, "Disband only leader perm", members) + return + } + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild", + [][]string{ + {"deleted", "1"}, + }, + [][]string{ + {"guild_id", guild.guildId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + task.SetFail() + cb(500, "server internal error", members) + return + } + task.SetSucc() + cb(0, "", members) + return + }) + }) } func (this *guildMgr) AsyncSetNotice(string, string, func(int32, string)) {