From e8a8a9fe1be5762ee2b08f23e1f22570074bd08a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 9 Apr 2024 20:49:57 +0800 Subject: [PATCH] 1 --- server/imserver_new/common/types.go | 2 +- server/imserver_new/guild/guildmgr.go | 35 +++++++++++++++++++-- server/imserver_new/player/player.go | 44 +++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/server/imserver_new/common/types.go b/server/imserver_new/common/types.go index 74d72263..39207c5b 100644 --- a/server/imserver_new/common/types.go +++ b/server/imserver_new/common/types.go @@ -99,7 +99,7 @@ type GuildMgr interface { AsyncKickout(string, string, func(int32, string)) AsyncDisband(string, func(int32, string, []string)) AsyncSetGuildJob(string, string, int32, func(int32, string)) - AsyncSearch(string, string, func(int32, string)) + AsyncSearch(int64, string, func(int32, string, int64, []string)) AsyncGetGuildLogs(string, string, func(int32, string)) AsyncUpdateGuild(string, map[int32]string, func(int32, string)) } diff --git a/server/imserver_new/guild/guildmgr.go b/server/imserver_new/guild/guildmgr.go index ec4ea0cf..de710a40 100644 --- a/server/imserver_new/guild/guildmgr.go +++ b/server/imserver_new/guild/guildmgr.go @@ -733,8 +733,39 @@ func (this *guildMgr) AsyncDisband(accountId string, cb func(int32, string, []st }) } -func (this *guildMgr) AsyncSearch(string, string, func(int32, string)) { - +func (this *guildMgr) AsyncSearch(sinceId int64, q string, cb func(int32, string, int64, []string)) { + f5.GetJsStyleDb().PageQuery( + constant.GAME_DB, + 50, + 0, + "SELECT guild_id FROM t_user WHERE 1=1", + []string{}, + f5.GetDbFilter().Comp( + f5.GetDbFilter().GT("idx", q5.ToString(sinceId)).And(), + f5.GetDbFilter().GT("deleted", q5.ToString(0)).And(), + f5.GetDbFilter().Like("guild_name", q5.ToString(q)).And(), + ), + "", + func (err error, pg *f5.Pagination) { + var lastSinceId int64 = sinceId + if err != nil { + cb(500, "", lastSinceId, []string{}) + } + guildIds := []string{} + for pg.Rows.Next() { + idx := q5.ToInt64(pg.Rows.GetByName("idx")) + guildId := pg.Rows.GetByName("guild_id") + if idx > lastSinceId { + lastSinceId = idx + } else { + panic(fmt.Sprintf("guild.AsyncSearch idx error:%s %s", idx, lastSinceId)) + } + if this.GetGuildByGuildId(guildId) != nil { + q5.AppendSlice(&guildIds, guildId) + } + } + cb(0, "", lastSinceId, guildIds) + }) } func (this *guildMgr) AsyncGetGuildLogs(string, string, func(int32, string)) { diff --git a/server/imserver_new/player/player.go b/server/imserver_new/player/player.go index 92453db0..f6c20480 100644 --- a/server/imserver_new/player/player.go +++ b/server/imserver_new/player/player.go @@ -692,6 +692,50 @@ func (this *player) CMGuildMembersList(hdr *f5.MsgHdr, msg *cs.CMGuildMembersLis } func (this *player) CMSearchGuilds(hdr *f5.MsgHdr, msg *cs.CMSearchGuilds) { + rspMsg := new(cs.SMSearchGuilds) + q5.NewSlice(&rspMsg.Guilds, 0, 50) + GetGuildMgr().AsyncSearch( + msg.GetSinceId(), + msg.GetName(), + func (errCode int32, errMsg string, sinceId int64, guildIds []string) { + rspMsg.SinceId = proto.Int64(sinceId) + if errCode != 0 { + this.SendMsg(rspMsg.Err(1, "server internal error")) + return + } + if len(guildIds) <= 0 { + this.SendMsg(rspMsg) + return + } + i := 0 + f5.NewAsyncTask( + func (task* f5.AsyncTask) { + doNextFunc := func() { + if i + 1 < len(guildIds) { + i++ + task.Continue() + } else { + this.SendMsg(rspMsg) + } + } + guild := GetGuildMgr().GetGuildByGuildId(guildIds[i]) + if guild == nil { + doNextFunc() + } else { + pbGuild := new(cs.MFGuild) + guild.AsyncFillMFGuild( + pbGuild, + func (errCode int32, errMsg string) { + if errCode != 0 { + this.SendMsg(rspMsg.Err(1, "server internal error")) + return + } + q5.AppendSlice(&rspMsg.Guilds, pbGuild) + doNextFunc() + }) + } + }) + }) } func (this *player) CMGuildLogs(hdr *f5.MsgHdr, msg *cs.CMGuildLogs) {