diff --git a/server/imserver_new/guild/guild.go b/server/imserver_new/guild/guild.go index 07ccf906..fd543f3d 100644 --- a/server/imserver_new/guild/guild.go +++ b/server/imserver_new/guild/guild.go @@ -151,6 +151,86 @@ func (this *guild) AsyncFillMFGuild(pbGuild *cs.MFGuild, cb func(int32, string)) }) } +func (this *guild) asyncLeave(accountId string, cb func(int32, string)) { + m := this.getMember(accountId) + if m == nil { + cb(0, "") + return + } + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild_member", + [][]string{ + {"deleted", "1"}, + }, + [][]string{ + {"guild_id", this.guildId}, + {"member_id", m.memberId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + cb(500, "server internal error") + return + } + if m.guildJob == constant.GuildMemberLevelLeader { + var nextLeader *member + this.traverseMembers( + func (ele *member) bool { + if ele != m { + if nextLeader == nil { + nextLeader = m + } else if ele.guildJob < nextLeader.guildJob { + nextLeader = m + } + } + return true + }) + if nextLeader != nil { + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild_member", + [][]string{ + {"guild_job", q5.ToString(constant.GuildMemberLevelLeader)}, + }, + [][]string{ + {"guild_id", this.guildId}, + {"member_id", m.memberId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + cb(500, "server internal error") + return + } + nextLeader.guildJob = constant.GuildMemberLevelLeader + cb(0, "") + return + }) + } + delete(this.idHash, m.memberId) + } + if this.GetMemberNum() <= 0 { + f5.GetJsStyleDb().Update( + constant.FRIEND_DB, + "t_guild", + [][]string{ + {"deleted", "1"}, + }, + [][]string{ + {"guild_id", this.guildId}, + }, + func (err error, lastInsertId int64, rowsAffected int64) { + if err != nil { + cb(500, "server internal error") + return + } + this.disband() + cb(0, "") + return + }) + } + }) +} + func newGuild() *guild { p := new(guild) p.idHash = make(map[string]*member) diff --git a/server/imserver_new/guild/guildmgr.go b/server/imserver_new/guild/guildmgr.go index 392c09ed..3385fa23 100644 --- a/server/imserver_new/guild/guildmgr.go +++ b/server/imserver_new/guild/guildmgr.go @@ -490,36 +490,17 @@ func (this *guildMgr) AsyncLeave(accountId string, cb func(int32, string, []stri cb(0, "", members) return } - if guild.isOwner(accountId) { - } else { - - } - if guild.GetMemberNum() <= 0 { - 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() - guild.disband() - cb(0, "", members) + guild.asyncLeave(accountId, + func (errCode int32, errMsg string) { + if errCode != 0 { + task.SetFail() + cb(errCode, errMsg, members) return - }) - } else { - task.SetSucc() - cb(0, "", members) - return - } + } + task.SetSucc() + cb(0, "", members) + return + }) }) }