Skip to content

feat(coop): config-driven multi-rendezvous server selection#25

Open
NonPolynomialTim wants to merge 1 commit into
xcomcoopdev:mainfrom
NonPolynomialTim:feature/multi-rendezvous-server
Open

feat(coop): config-driven multi-rendezvous server selection#25
NonPolynomialTim wants to merge 1 commit into
xcomcoopdev:mainfrom
NonPolynomialTim:feature/multi-rendezvous-server

Conversation

@NonPolynomialTim

@NonPolynomialTim NonPolynomialTim commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

The main reason for this change is that the repo immediately gives an error when pressing the "COOP" button if the rendezvous server keys are not compiled into the build, locking players out of TCP as well. This fixes that by gracefully failing, while future-proofing UDP should the current rendezvous server cease to exist for whatever reason—the community can now host their own.

Move the rendezvous host/ports/version/public-keys out of source into a runtime rendezvous.json holding multiple named servers. The Server Browser gains a top-right combobox to pick the active server; all coop operations use the selection. rendezvous.cfg goes in the root of the build directory, next to OpenXcom.exe.

  • rendezvous_config: JSON servers[], atomic active index, per-index accessor; active-server accessors keep their signatures so existing glue is unchanged
  • DisableableComboBox: ComboBox subclass with per-option enable/disable (setColor face + setTextColor label kept independent)
  • glue: probeRendezvousServer / probeAllRendezvousServersAsync (punch-free LIST_ROOMS health check)
  • ServerList: combobox top-right; parallel probes on entry; per-server status drives "(Wait...)"/"(offline)" labels, greyed disabled rows, dimmed button label when the selection is offline, and an animated "Fetching server list ..." / offline warning in a shared textbox; selection persisted by name in rendezvous_selection.json with fallback to the first server
  • title left-aligned to the left-column widgets

Waiting:
image

All servers down:
image

Server up:
image

Move the rendezvous host/ports/version/public-keys out of source into a
runtime rendezvous.json holding multiple named servers. The Server Browser
gains a top-right combobox to pick the active server; all coop operations use
the selection.

- rendezvous_config: JSON servers[], atomic active index, per-index accessor;
  active-server accessors keep their signatures so existing glue is unchanged
- DisableableComboBox: ComboBox subclass with per-option enable/disable
  (setColor face + setTextColor label kept independent)
- glue: probeRendezvousServer / probeAllRendezvousServersAsync (punch-free
  LIST_ROOMS health check)
- ServerList: combobox top-right; parallel probes on entry; per-server status
  drives "(Wait...)"/"(offline)" labels, greyed disabled rows, dimmed button
  label when the selection is offline, and an animated "Fetching server list
  ..." / offline warning in a shared textbox; selection persisted by name in
  rendezvous_selection.json with fallback to the first server
- title left-aligned to the left-column widgets

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant