using System; using System.Collections.Generic; using System.Threading.Tasks; /// /// 排行榜模块。 /// public sealed class BriskLeaderboardModule : BriskModuleBase { /// /// 获取排行榜 Top 列表。 /// public async Task> GetTopAsync(string rankKey, int limit = 20) { ValidateRankKey(rankKey); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync( $"/ranks/{rankKey}/top", CreateLimitQuery(limit), true); return (IReadOnlyList)BriskModelMapper.ToLeaderboardEntries(data); }); } /// /// 获取当前玩家在排行榜中的信息。 /// public async Task GetMeAsync(string rankKey) { ValidateRankKey(rankKey); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync($"/ranks/{rankKey}/me", null, true); return BriskModelMapper.ToLeaderboardPlayerRank(BriskModelMapper.ExtractObject(data)); }); } /// /// 获取当前玩家附近的排名区间。 /// public async Task> GetAroundMeAsync(string rankKey, int range = 10) { ValidateRankKey(rankKey); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync( $"/ranks/{rankKey}/around-me", CreateRangeQuery(range), true); return (IReadOnlyList)BriskModelMapper.ToLeaderboardEntries(data); }); } /// /// 提交当前玩家分数。 /// public async Task SubmitScoreAsync(string rankKey, long score) { ValidateRankKey(rankKey); await ExecuteAsync(async context => { await context.HttpClient.PostJsonRawAsync( $"/ranks/{rankKey}/score", new Dictionary { { "score", score } }, true); }); } /// /// 获取当前赛季信息。 /// public async Task GetCurrentSeasonAsync(string rankKey) { ValidateRankKey(rankKey); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync($"/ranks/{rankKey}/season/current", null, true); return BriskModelMapper.ToRankSeasonInfo(BriskModelMapper.ExtractObject(data)); }); } /// /// 获取赛季历史列表。 /// public async Task> GetSeasonHistoryAsync(string rankKey, int limit = 20) { ValidateRankKey(rankKey); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync( $"/ranks/{rankKey}/history", CreateLimitQuery(limit), true); return (IReadOnlyList)BriskModelMapper.ToRankSeasonInfos(data); }); } /// /// 获取指定历史赛季的排行榜详情。 /// public async Task> GetSeasonHistoryDetailAsync(string rankKey, string seasonId, int limit = 20) { ValidateRankKey(rankKey); RequireNotEmpty(seasonId, nameof(seasonId)); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync( $"/ranks/{rankKey}/history/{seasonId}", CreateLimitQuery(limit), true); return (IReadOnlyList)BriskModelMapper.ToLeaderboardEntries(data); }); } private static Dictionary CreateLimitQuery(int limit) { return limit > 0 ? new Dictionary { { "limit", limit.ToString() } } : null; } private static Dictionary CreateRangeQuery(int range) { return range > 0 ? new Dictionary { { "range", range.ToString() } } : null; } private static void ValidateRankKey(string rankKey) { RequireNotEmpty(rankKey, nameof(rankKey)); } }