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));
}
}