Build the publisher and session-browser .NET client SDK #9

Open
opened 2026-07-15 10:04:18 +02:00 by Kyuubi · 2 comments
Owner

Parent: #1
Depends on: #4, #7, #8

Outcome

Let SpaceGame and Unscouted register, maintain, and browse sessions without duplicating HTTP protocol code.

Scope

  • Implement typed publisher and browser clients over caller-supplied/configured HttpClient.
  • Provide registration, update, heartbeat, deregistration, query, paging, cancellation, disposal, and lease-loss handling.
  • Retry only safe/idempotent operations using server guidance and bounded jitter.
  • Expose stable result/error types rather than HTTP implementation details.
  • Keep the public SDK engine-independent and avoid hidden global state or background work that cannot be cancelled.
  • Provide test fakes/interfaces for consumer tests.

Acceptance criteria

  • A test host publishes, renews, updates, and deregisters through the SDK.
  • A test browser filters and pages sessions without direct HTTP handling.
  • Heartbeat stops cleanly on cancellation/disposal and surfaces lease loss.
  • Retries never duplicate unsafe registration or join effects.
  • SDK APIs contain no Godot types and no embedded game credential.
  • HTTP resources, response bodies, and cancellation registrations are disposed.
  • Contract/server/client compatibility tests run together.
Parent: #1 Depends on: #4, #7, #8 ## Outcome Let SpaceGame and Unscouted register, maintain, and browse sessions without duplicating HTTP protocol code. ## Scope - Implement typed publisher and browser clients over caller-supplied/configured `HttpClient`. - Provide registration, update, heartbeat, deregistration, query, paging, cancellation, disposal, and lease-loss handling. - Retry only safe/idempotent operations using server guidance and bounded jitter. - Expose stable result/error types rather than HTTP implementation details. - Keep the public SDK engine-independent and avoid hidden global state or background work that cannot be cancelled. - Provide test fakes/interfaces for consumer tests. ## Acceptance criteria - A test host publishes, renews, updates, and deregisters through the SDK. - A test browser filters and pages sessions without direct HTTP handling. - Heartbeat stops cleanly on cancellation/disposal and surfaces lease loss. - Retries never duplicate unsafe registration or join effects. - SDK APIs contain no Godot types and no embedded game credential. - HTTP resources, response bodies, and cancellation registrations are disposed. - Contract/server/client compatibility tests run together.
Kyuubi self-assigned this 2026-07-16 06:07:11 +02:00
Author
Owner

Starting implementation on codex/issue-9-client-sdk, stacked on the verified #2–#8 foundation. I’ll build engine-independent publisher/browser interfaces over caller-owned HttpClient, typed results, cancellation/disposal-safe lease maintenance, bounded server-guided retry behavior for idempotent operations only, paging, lease-loss signaling, and reusable consumer fakes.

Starting implementation on `codex/issue-9-client-sdk`, stacked on the verified #2–#8 foundation. I’ll build engine-independent publisher/browser interfaces over caller-owned `HttpClient`, typed results, cancellation/disposal-safe lease maintenance, bounded server-guided retry behavior for idempotent operations only, paging, lease-loss signaling, and reusable consumer fakes.
Author
Owner

Implemented and pushed on codex/issue-9-client-sdk at 06c3973.

Highlights:

  • Typed, Godot-independent publisher and browser clients over caller-owned HttpClient.
  • Registration, renew, update, deregister, single-page/direct lookup, and bounded cursor paging.
  • Explicit cancellable/disposable lease maintenance with lease-loss reporting.
  • Safe-operation retry policy with bounded jitter/server guidance, stable result envelopes, bounded response reads, and redacted credentials.
  • Injectable interfaces/delay seam, versioned client public-API snapshot, package README, behavior tests, and live-server lifecycle integration.

Audit fixes preserved registration payloads across retries, covered proxy transient statuses, enforced non-null success values, and made exceptional lease disposal cleanup-safe.

Verification:

  • format verification: pass
  • Release build: pass
  • full Release suite: 110 passed, 0 failed, 0 skipped
  • client NuGet pack: pass without warnings
  • generated OpenAPI: no drift

The issue remains open until the stacked branch is landed.

Implemented and pushed on `codex/issue-9-client-sdk` at `06c3973`. Highlights: - Typed, Godot-independent publisher and browser clients over caller-owned `HttpClient`. - Registration, renew, update, deregister, single-page/direct lookup, and bounded cursor paging. - Explicit cancellable/disposable lease maintenance with lease-loss reporting. - Safe-operation retry policy with bounded jitter/server guidance, stable result envelopes, bounded response reads, and redacted credentials. - Injectable interfaces/delay seam, versioned client public-API snapshot, package README, behavior tests, and live-server lifecycle integration. Audit fixes preserved registration payloads across retries, covered proxy transient statuses, enforced non-null success values, and made exceptional lease disposal cleanup-safe. Verification: - format verification: pass - Release build: pass - full Release suite: 110 passed, 0 failed, 0 skipped - client NuGet pack: pass without warnings - generated OpenAPI: no drift The issue remains open until the stacked branch is landed.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: HeiKyu/Rendezvous#9