feat(backend): Keen online-backend emulator (Enshrouded co-op) #11

Closed
gabrielgad wants to merge 2 commits from keen-backend into feat/working-dir-handler-field
gabrielgad commented 2026-06-27 22:44:10 -04:00 (Migrated from github.com)

Adds keen as a multiplayer backend alongside goldberg/eos/photon/facepunch/standalone, for titles gated on Keen Games' proprietary auth server (e.g. Enshrouded, eonlinedb.enshrouded.com:27503). Until the game authenticates to Keen it stays Host_Offline and creates no lobby — goldberg alone can't bridge it.

What it does

  • src/backend/keen.rs — runs the bundled keen-emu auth server as a shared sidecar (start_services) and injects --keenonline-server-data-file (extra_launch_args). requires_overlay=false. Pairs with goldberg (keen = auth gate, goldberg = Steam P2P lobby + data).
  • Backend trait — two additive, default-impl'd hooks (extra_launch_args, start_services); all existing backends unchanged.
  • Wired into backend.rs (register + collect_backend_launch_args/start_backend_services), build_cmds.rs (append args), session.rs (start sidecar before launch, kill at teardown), handler.rs (keen: Option<KeenSettings> + keen_ref()/has_keen()).

Asset

The keen-emu binary is fetched into assets/keen/ (gitignored, like goldberg) from the new keen-emu-splitux repo (v0.1.0).

Handler

keen:
  addr: "127.0.0.1:27503"
goldberg:
  disable_networking: false
  settings: { force_lobby_type.txt: "2", invite_all.txt: "" }

Verified

2-instance Enshrouded co-op end-to-end: keen-emu auth → host Host_Online → joiner discovers + joins over goldberg LAN → joiner loads into the host's world. (Requires the goldberg loopback peer-endpoint fix, gbe_fork-splitux release-p2p-loopback-fix.)

Adds `keen` as a multiplayer backend alongside goldberg/eos/photon/facepunch/standalone, for titles gated on Keen Games' proprietary auth server (e.g. Enshrouded, `eonlinedb.enshrouded.com:27503`). Until the game authenticates to Keen it stays `Host_Offline` and creates no lobby — goldberg alone can't bridge it. ## What it does - **`src/backend/keen.rs`** — runs the bundled `keen-emu` auth server as a shared **sidecar** (`start_services`) and injects `--keenonline-server-data-file` (`extra_launch_args`). `requires_overlay=false`. Pairs with goldberg (keen = auth gate, goldberg = Steam P2P lobby + data). - **`Backend` trait** — two additive, default-impl'd hooks (`extra_launch_args`, `start_services`); all existing backends unchanged. - Wired into `backend.rs` (register + `collect_backend_launch_args`/`start_backend_services`), `build_cmds.rs` (append args), `session.rs` (start sidecar before launch, kill at teardown), `handler.rs` (`keen: Option<KeenSettings>` + `keen_ref()`/`has_keen()`). ## Asset The `keen-emu` binary is fetched into `assets/keen/` (gitignored, like goldberg) from the new **[keen-emu-splitux](https://github.com/splitux-gg/keen-emu-splitux)** repo (v0.1.0). ## Handler ```yaml keen: addr: "127.0.0.1:27503" goldberg: disable_networking: false settings: { force_lobby_type.txt: "2", invite_all.txt: "" } ``` ## Verified 2-instance Enshrouded co-op end-to-end: keen-emu auth → host `Host_Online` → joiner discovers + joins over goldberg LAN → joiner loads into the host's world. (Requires the goldberg loopback peer-endpoint fix, gbe_fork-splitux `release-p2p-loopback-fix`.)
gabrielgad commented 2026-07-03 17:14:08 -04:00 (Migrated from github.com)

Superseded by main - verified file-by-file: every change here (backend registration, handler config, launch-arg injection, sidecar lifecycle in session.rs, splitux.sh fetch, .gitignore) already exists on main via a different commit path (41046bb + follow-up fixes), with additional improvements (concurrency-safe data file path, presence guard, stdio inherit, generalized sidecar-service lifecycle). Closing as redundant.

Superseded by main - verified file-by-file: every change here (backend registration, handler config, launch-arg injection, sidecar lifecycle in session.rs, splitux.sh fetch, .gitignore) already exists on main via a different commit path (41046bb + follow-up fixes), with additional improvements (concurrency-safe data file path, presence guard, stdio inherit, generalized sidecar-service lifecycle). Closing as redundant.

Pull request closed

Sign in to join this conversation.
No description provided.