feat: add bounded compatible session browser (#8)
quality-gate / quality (push) Successful in 57s
quality-gate / quality (push) Successful in 57s
Closes #8
This commit is contained in:
@@ -223,7 +223,9 @@ internal sealed record VisibleListingQuery(
|
||||
TenantScope Scope,
|
||||
uint ProtocolVersion,
|
||||
RegionId? RegionId,
|
||||
int MaximumResults = ContractLimits.BrowserPageMaxItems);
|
||||
int MaximumResults = ContractLimits.BrowserPageMaxItems,
|
||||
SessionListingId? AfterListingId = null,
|
||||
bool ExcludeFull = false);
|
||||
|
||||
internal enum AttemptPeerRole
|
||||
{
|
||||
|
||||
@@ -301,7 +301,7 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
|
||||
|| query.ProtocolVersion == 0
|
||||
|| (query.RegionId.HasValue && string.IsNullOrEmpty(query.RegionId.Value.Value))
|
||||
|| query.MaximumResults <= 0
|
||||
|| query.MaximumResults > ContractLimits.BrowserPageMaxItems)
|
||||
|| query.MaximumResults > ContractLimits.BrowserPageMaxItems + 1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(query));
|
||||
}
|
||||
@@ -311,6 +311,10 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
|
||||
&& entry.Definition.ProtocolVersion == query.ProtocolVersion
|
||||
&& entry.Definition.Visibility == ListingVisibility.Public
|
||||
&& (!query.RegionId.HasValue || entry.Definition.RegionId == query.RegionId.Value)
|
||||
&& (!query.AfterListingId.HasValue
|
||||
|| entry.Definition.ListingId.Value.CompareTo(query.AfterListingId.Value.Value) > 0)
|
||||
&& (!query.ExcludeFull
|
||||
|| entry.Definition.CurrentPlayers < entry.Definition.MaximumPlayers)
|
||||
&& _presence.ContainsKey(entry.Definition.HostPresenceHandle))
|
||||
.OrderBy(static entry => entry.Definition.ListingId.Value)
|
||||
.Take(query.MaximumResults)
|
||||
|
||||
Reference in New Issue
Block a user