diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/SlotsController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/SlotsController.cs index 230146b6..1b2415ba 100644 --- a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/SlotsController.cs +++ b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/SlotsController.cs @@ -1,5 +1,4 @@ #nullable enable -using System.Security.Cryptography; using LBPUnion.ProjectLighthouse.Configuration; using LBPUnion.ProjectLighthouse.Database; using LBPUnion.ProjectLighthouse.Extensions; @@ -146,7 +145,7 @@ public class SlotsController : ControllerBase { if (page != null) pageStart = (int)page * 30; // bit of a better placeholder until we can track average user interaction with /stream endpoint - return await this.ThumbsSlots(pageStart, Math.Min(pageSize, 30), gameFilterType, players, move, "thisWeek"); + return await this.ThumbsSlots(pageStart, Math.Min(pageSize, 30), gameFilterType, players, move, "thisMonth"); } [HttpGet("slots")] @@ -160,6 +159,7 @@ public class SlotsController : ControllerBase List slots = (await this.database.Slots.ByGameVersion(gameVersion, false, true) .OrderByDescending(s => s.FirstUploaded) + .ThenByDescending(s => s.SlotId) .Skip(Math.Max(0, pageStart - 1)) .Take(Math.Min(pageSize, 30)) .ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token)); @@ -284,8 +284,9 @@ public class SlotsController : ControllerBase GameVersion gameVersion = token.GameVersion; + const double biasFactor = .8f; List slots = (await this.database.Slots.ByGameVersion(gameVersion, false, true) - .OrderBy(_ => EF.Functions.Random()) + .OrderByDescending(s => EF.Functions.Random() * (s.FirstUploaded * biasFactor)) .Take(Math.Min(pageSize, 30)) .ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token)); diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/StatisticsController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/StatisticsController.cs index cd45d92a..2e8932ba 100644 --- a/ProjectLighthouse.Servers.GameServer/Controllers/StatisticsController.cs +++ b/ProjectLighthouse.Servers.GameServer/Controllers/StatisticsController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using LBPUnion.ProjectLighthouse.Extensions; using LBPUnion.ProjectLighthouse.Types.Serialization; +using LBPUnion.ProjectLighthouse.Types.Users; namespace LBPUnion.ProjectLighthouse.Servers.GameServer.Controllers; @@ -22,7 +23,7 @@ public class StatisticsController : ControllerBase } [HttpGet("playersInPodCount")] - public IActionResult PlayersInPodCount() => this.Ok((StatisticsHelper.UserCountInPod(this.database)).ToString()); +public IActionResult PlayersInPodCount() => this.Ok(StatisticsHelper.RoomCountForPlatform(this.GetToken().Platform).ToString()); [HttpGet("totalPlayerCount")] public async Task TotalPlayerCount() => this.Ok((await StatisticsHelper.RecentMatchesForGame(this.database, this.GetToken().GameVersion)).ToString()); diff --git a/ProjectLighthouse/Helpers/StatisticsHelper.cs b/ProjectLighthouse/Helpers/StatisticsHelper.cs index 8daf2cd3..750ae34f 100644 --- a/ProjectLighthouse/Helpers/StatisticsHelper.cs +++ b/ProjectLighthouse/Helpers/StatisticsHelper.cs @@ -23,7 +23,7 @@ public static class StatisticsHelper public static async Task UserCount(DatabaseContext database) => await database.Users.CountAsync(u => u.PermissionLevel != PermissionLevel.Banned); - public static int UserCountInPod(DatabaseContext database) => RoomHelper.Rooms.Count(r => r.State == RoomState.Idle); + public static int RoomCountForPlatform(Platform targetPlatform) => RoomHelper.Rooms.Count(r => r.IsLookingForPlayers && r.RoomPlatform == targetPlatform); public static async Task TeamPickCount(DatabaseContext database) => await database.Slots.CountAsync(s => s.TeamPick);