Skip to content

Commit

Permalink
feat: Integrate summing fetch type of leaderboard-service with the Le…
Browse files Browse the repository at this point in the history
…aderboardClient
  • Loading branch information
Patryk Chojnicki authored and Dawid Sygocki committed Jul 14, 2023
1 parent 75ef8ce commit 891bdda
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
12 changes: 11 additions & 1 deletion Runtime/Communication/Leaderboards/LeaderboardClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class LeaderboardClient

/// <param name="pageSize">Must be in range 1 - 100 (inclusive)</param>
/// <param name="queueName">No filtering by queue if null provided</param>
public LeaderboardClient(int pageSize, LeaderboardTimeScope timeScope, string queueName = null, LeaderboardGameVersion gameVersion = LeaderboardGameVersion.All)
public LeaderboardClient(int pageSize, LeaderboardTimeScope timeScope, string queueName = null, LeaderboardGameVersion gameVersion = LeaderboardGameVersion.All, LeaderboardType leaderboardType = LeaderboardType.BestResult)
{
if (pageSize is < 1 or > 100)
throw new ArgumentOutOfRangeException(nameof(pageSize), "Must be in range 1 - 100 (inclusive)");
Expand All @@ -31,6 +31,9 @@ public LeaderboardClient(int pageSize, LeaderboardTimeScope timeScope, string qu
if (!Enum.IsDefined(typeof(LeaderboardGameVersion), gameVersion))
throw new ArgumentOutOfRangeException(nameof(gameVersion));

if (!Enum.IsDefined(typeof(LeaderboardType), leaderboardType))
throw new ArgumentOutOfRangeException(nameof(leaderboardType));

var gameConfig = ElympicsConfig.Load().GetCurrentGameConfig();
if (gameConfig == null)
throw new ElympicsException("Provide ElympicsGameConfig before proceeding");
Expand All @@ -43,6 +46,7 @@ public LeaderboardClient(int pageSize, LeaderboardTimeScope timeScope, string qu
{ "GameVersion", gameVersion == LeaderboardGameVersion.All ? null : gameConfig.GameVersion },
{ "QueueName", queueName },
{ "TimeScope", timeScope.LeaderboardTimeScopeType.ToString() },
{ "FetchType", leaderboardType == LeaderboardType.BestResult ? "Max" : "SumMax" },
};

if (timeScope.LeaderboardTimeScopeType == LeaderboardTimeScopeType.Custom)
Expand Down Expand Up @@ -122,4 +126,10 @@ public enum LeaderboardGameVersion
All,
Current,
}

public enum LeaderboardType
{
BestResult,
BestSumOfResults,
}
}
6 changes: 4 additions & 2 deletions Runtime/Communication/Leaderboards/LeaderboardEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ public class LeaderboardEntry
public string UserId { get; }
public int Position { get; }
public float Score { get; }
public DateTimeOffset ScoredAt { get; }
public DateTimeOffset? ScoredAt { get; }

internal LeaderboardEntry(LeaderboardResponseEntry entry)
{
UserId = entry.userId;
Position = entry.position;
Score = entry.points;
ScoredAt = DateTimeOffset.Parse(entry.endedAt);

if (DateTimeOffset.TryParse(entry.endedAt, out var endedAt))
ScoredAt = endedAt;
}
}
}
5 changes: 3 additions & 2 deletions Samples~/Leaderboards/LeaderboardTester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class LeaderboardTester : MonoBehaviour
[SerializeField] private int pageSize = 5;
[SerializeField] private string queue;
[SerializeField] private LeaderboardGameVersion gameVersion = LeaderboardGameVersion.All;
[SerializeField] private LeaderboardType leaderboardType = LeaderboardType.BestResult;
[SerializeField] private LeaderboardTimeScopeType timeScope = LeaderboardTimeScopeType.Month;
[SerializeField] private string customTimeScopeFrom = "2023-04-21T12:00:00+02:00";
[SerializeField] private string customTimeScopeTo = "2023-04-22T12:00:00+02:00";
Expand All @@ -34,7 +35,7 @@ private void CreateLeaderboardClient()
var timeScopeObject = timeScope != LeaderboardTimeScopeType.Custom
? new LeaderboardTimeScope(timeScope)
: new LeaderboardTimeScope(DateTimeOffset.Parse(customTimeScopeFrom), DateTimeOffset.Parse(customTimeScopeTo));
_leaderboardClient = new LeaderboardClient(pageSize, timeScopeObject, queue, gameVersion);
_leaderboardClient = new LeaderboardClient(pageSize, timeScopeObject, queue, gameVersion, leaderboardType);
}
[UsedImplicitly] private void FetchFirst() => _leaderboardClient.FetchFirstPage(DisplayEntries, CustomFailHandler);
[UsedImplicitly] private void FetchUserPage() => _leaderboardClient.FetchPageWithUser(DisplayEntries);
Expand All @@ -47,7 +48,7 @@ private void DisplayEntries(LeaderboardFetchResult result)
var totalPages = (int)Math.Ceiling(result.TotalRecords / (float)pageSize);
Debug.Log($"Fetched leaderboards: {result.Entries.Count} entries, page {result.PageNumber} of {totalPages}");
foreach (var entry in result.Entries)
Debug.Log($"{entry.Position}. Score: {entry.Score} User: {entry.UserId} When: {entry.ScoredAt.LocalDateTime}");
Debug.Log($"{entry.Position}. Score: {entry.Score} User: {entry.UserId} When: {entry.ScoredAt?.LocalDateTime}");
}

private static void CustomFailHandler(LeaderboardFetchError fetchError)
Expand Down

0 comments on commit 891bdda

Please sign in to comment.