feat: freeze v1 transport contracts (#4)
quality-gate / quality (push) Successful in 51s

Closes #4
This commit is contained in:
KyuubiYoru
2026-07-16 04:52:38 +02:00
parent e626b89909
commit 69c8b2d2bc
43 changed files with 3737 additions and 12 deletions
@@ -0,0 +1,92 @@
using System.Text.Json.Serialization;
namespace FinalFactory.Rendezvous.Contracts;
public sealed class CreateJoinAttemptRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public string IdempotencyKey { get; set; } = string.Empty;
[JsonRequired]
public GameId GameId { get; set; }
[JsonRequired]
public EnvironmentId EnvironmentId { get; set; }
[JsonRequired]
public SessionListingId ListingId { get; set; }
[JsonRequired]
public uint ProtocolVersion { get; set; }
}
public sealed class CreateJoinAttemptResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public JoinAttemptId AttemptId { get; set; }
[JsonRequired]
public MediationHandle MediationHandle { get; set; }
[JsonRequired]
public string ClientPunchCapability { get; set; } = string.Empty;
[JsonRequired]
public DateTimeOffset ExpiresAt { get; set; }
public NetworkEndpoint? DedicatedFallback { get; set; }
}
public sealed class HostJoinAttempt
{
[JsonRequired]
public JoinAttemptId AttemptId { get; set; }
[JsonRequired]
public MediationHandle MediationHandle { get; set; }
[JsonRequired]
public string HostPunchCapability { get; set; } = string.Empty;
[JsonRequired]
public DateTimeOffset ExpiresAt { get; set; }
}
public sealed class BrowseHostJoinAttemptsResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public List<HostJoinAttempt> Items { get; set; } = [];
public string? NextCursor { get; set; }
}
public sealed class ReportConnectionOutcomeRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public ConnectionOutcomeKind Outcome { get; set; }
[JsonRequired]
public int ElapsedMilliseconds { get; set; }
public string? DiagnosticCode { get; set; }
}
public sealed class ReportConnectionOutcomeResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public bool Accepted { get; set; }
}
@@ -0,0 +1,189 @@
using System.Text.Json.Serialization;
namespace FinalFactory.Rendezvous.Contracts;
public sealed class SessionListing
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public SessionListingId ListingId { get; set; }
[JsonRequired]
public GameId GameId { get; set; }
[JsonRequired]
public EnvironmentId EnvironmentId { get; set; }
[JsonRequired]
public RegionId RegionId { get; set; }
[JsonRequired]
public uint ProtocolVersion { get; set; }
[JsonRequired]
public string BuildVersion { get; set; } = string.Empty;
[JsonRequired]
public string DisplayName { get; set; } = string.Empty;
[JsonRequired]
public ListingVisibility Visibility { get; set; }
[JsonRequired]
public PublisherTrustMode PublisherTrustMode { get; set; }
[JsonRequired]
public SessionCapacity Capacity { get; set; } = new();
[JsonRequired]
public Dictionary<string, string> Metadata { get; set; } = new(StringComparer.Ordinal);
}
public sealed class RegisterSessionRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public string IdempotencyKey { get; set; } = string.Empty;
[JsonRequired]
public GameId GameId { get; set; }
[JsonRequired]
public EnvironmentId EnvironmentId { get; set; }
[JsonRequired]
public RegionId RegionId { get; set; }
[JsonRequired]
public uint ProtocolVersion { get; set; }
[JsonRequired]
public string BuildVersion { get; set; } = string.Empty;
[JsonRequired]
public string DisplayName { get; set; } = string.Empty;
[JsonRequired]
public ListingVisibility Visibility { get; set; }
[JsonRequired]
public SessionCapacity Capacity { get; set; } = new();
[JsonRequired]
public Dictionary<string, string> Metadata { get; set; } = new(StringComparer.Ordinal);
}
public sealed class RegisterSessionResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public SessionListingId ListingId { get; set; }
[JsonRequired]
public LeaseId LeaseId { get; set; }
[JsonRequired]
public string LeaseToken { get; set; } = string.Empty;
[JsonRequired]
public MediationHandle HostPresenceHandle { get; set; }
[JsonRequired]
public string HostPresenceCapability { get; set; } = string.Empty;
[JsonRequired]
public DateTimeOffset ExpiresAt { get; set; }
}
public sealed class RenewLeaseRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public string LeaseToken { get; set; } = string.Empty;
}
public sealed class RenewLeaseResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public DateTimeOffset ExpiresAt { get; set; }
}
public sealed class UpdateSessionRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public string LeaseToken { get; set; } = string.Empty;
[JsonRequired]
public string BuildVersion { get; set; } = string.Empty;
[JsonRequired]
public string DisplayName { get; set; } = string.Empty;
[JsonRequired]
public SessionCapacity Capacity { get; set; } = new();
[JsonRequired]
public Dictionary<string, string> Metadata { get; set; } = new(StringComparer.Ordinal);
}
public sealed class DeleteSessionRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public string LeaseToken { get; set; } = string.Empty;
}
public sealed class BrowseSessionsRequest
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public GameId GameId { get; set; }
[JsonRequired]
public EnvironmentId EnvironmentId { get; set; }
[JsonRequired]
public uint ProtocolVersion { get; set; }
public RegionId? RegionId { get; set; }
public int PageSize { get; set; } = ContractLimits.BrowserPageMaxItems;
public string? Cursor { get; set; }
}
public sealed class BrowseSessionsResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public List<SessionListing> Items { get; set; } = [];
public string? NextCursor { get; set; }
}
public sealed class GetSessionResponse
{
[JsonRequired]
public int ContractVersion { get; set; } = ContractLimits.ContractVersion;
[JsonRequired]
public SessionListing Session { get; set; } = new();
}