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:
@@ -0,0 +1,71 @@
|
||||
using FinalFactory.Rendezvous.Contracts;
|
||||
using FinalFactory.Rendezvous.Server.Browser;
|
||||
using FinalFactory.Rendezvous.Server.State;
|
||||
using FinalFactory.Rendezvous.Tests.State;
|
||||
|
||||
namespace FinalFactory.Rendezvous.Tests.Browser;
|
||||
|
||||
internal sealed class SessionBrowserFixture : IDisposable
|
||||
{
|
||||
private readonly EphemeralStateFixture _state = new();
|
||||
|
||||
public SessionBrowserFixture()
|
||||
{
|
||||
Cursors = new();
|
||||
Browser = new(_state.Store, Cursors, _state.Clock);
|
||||
}
|
||||
|
||||
public InMemoryEphemeralRendezvousStore Store => _state.Store;
|
||||
public ManualRendezvousClock Clock => _state.Clock;
|
||||
public SessionBrowserCursorCodec Cursors { get; }
|
||||
public SessionBrowserService Browser { get; }
|
||||
public TenantScope Scope => _state.Scope;
|
||||
|
||||
public StoredListing Add(
|
||||
TenantScope? scope = null,
|
||||
uint protocolVersion = 7,
|
||||
RegionId? regionId = null,
|
||||
ListingVisibility visibility = ListingVisibility.Public,
|
||||
bool fresh = true,
|
||||
int currentPlayers = 1,
|
||||
int maximumPlayers = 8,
|
||||
IReadOnlyDictionary<string, string>? metadata = null)
|
||||
{
|
||||
CreateListingCommand seed = _state.ListingCommand();
|
||||
CreateListingCommand command = seed with
|
||||
{
|
||||
Listing = seed.Listing with
|
||||
{
|
||||
Scope = scope ?? Scope,
|
||||
ProtocolVersion = protocolVersion,
|
||||
RegionId = regionId ?? seed.Listing.RegionId,
|
||||
Visibility = visibility,
|
||||
CurrentPlayers = currentPlayers,
|
||||
MaximumPlayers = maximumPlayers,
|
||||
Metadata = metadata ?? seed.Listing.Metadata,
|
||||
},
|
||||
};
|
||||
StoredListing listing = Store.CreateListing(command).Value!;
|
||||
if (fresh)
|
||||
{
|
||||
listing = Store.BindHostPresence(new(
|
||||
command.Listing.HostPresenceHandle,
|
||||
command.Listing.HostPresenceFingerprint,
|
||||
EphemeralStateFixture.PublicEndpoint(40_000),
|
||||
null)).Value!;
|
||||
}
|
||||
|
||||
return listing;
|
||||
}
|
||||
|
||||
public BrowseSessionsRequest Request(int pageSize = 100) => new()
|
||||
{
|
||||
GameId = Scope.GameId,
|
||||
EnvironmentId = Scope.EnvironmentId,
|
||||
ProtocolVersion = 7,
|
||||
RegionId = new("eu-central"),
|
||||
PageSize = pageSize,
|
||||
};
|
||||
|
||||
public void Dispose() => Cursors.Dispose();
|
||||
}
|
||||
Reference in New Issue
Block a user