using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public class UgcNpcCommunicationRankAction : EntityActionBase { private Dictionary> m_ranks { get; } = new(); public UgcNpcCommunicationRankAction(UgcNpcRankEntity owner) : base(owner) { } public override async Task onInit() => await Task.FromResult(new Result()); public override void onClear() { } public async Task<(Result result, List? list)> getRanks(UgcNpcRankState state) { if (!m_ranks.TryGetValue(state, out var ranks)) { ranks = await loadRank(state); } return (new Result(), ranks); } public async Task?> loadRank(UgcNpcRankState state) { Result result; AIChatRanking? chat_ranks; List? list; var ugc_npc_guids = new List<(string, long)>(); // 누적 랭킹 조회 if (state == UgcNpcRankState.Total) { (result, chat_ranks) = await AIChatServerConnector.getAllRanking(LanguageType.Ko, UgcNpcRankEntity.DefaultPageNum, UgcNpcRankEntity.DefaultPageSize); if (result.isFail() || chat_ranks == null) return null; } // 트랜드 랭킹 조회 else { (result, chat_ranks) = await AIChatServerConnector.getTodayRanking(LanguageType.Ko, UgcNpcRankEntity.DefaultPageNum, UgcNpcRankEntity.DefaultPageSize); if (result.isFail() || chat_ranks == null) return null; } foreach (var rank in chat_ranks.items) { ugc_npc_guids.Add((UgcNpcRankHelper.makeRankKey(rank.owner_guid, rank.char_guid), rank.total_chat_count)); } list = await UgcNpcRankHelper.getUgcNpcSummaryFromMetaGuid(ugc_npc_guids); Log.getLogger().info($"update ugc npc communication rank data : rank state[{state}] / rank count[{list.Count}]"); m_ranks[state] = list; return list; } }