Files
DorkNet/docs/troubleshooting.md
Alexa f5ad4b59ef Localtunnel hosting + admin panel + AppData db
- Default hosting mode is now Localtunnel — public *.loca.lt URL,
  no account, auto-fetched on first run. Replaces the prototyped
  Tailscale mode.
- Tailscale code purged from launcher + CLI; docs swapped to
  Localtunnel throughout (easy-setup, joining-a-server, server-cli,
  troubleshooting, faq, READMEs).
- Launcher sidebar gains an Open admin panel button — opens
  https://admin.<apex> in the browser once the server is live.
- SQLite db moves to %APPDATA%\DorkNet\dorknet.db (server reads
  Database__SqlitePath env var, launcher passes it). Existing dbs
  under <serverDir>\data\ are migrated on first run.
- CLI Program.cs: --mode default flips from tailscale to localtunnel;
  csproj links in LocaltunnelTunnel + LocaltunnelInstaller.
- New Backend files: LauncherNameServer, LocaltunnelInstaller,
  LocaltunnelTunnel, SingleOriginServiceMap.
- .gitignore: exclude installer/out/.
2026-05-28 01:39:38 +03:00

109 lines
4.3 KiB
Markdown

# Troubleshooting
If your symptom isn't here, check [the FAQ](faq.md) and then open an
issue with: your OS, DorkNet version, server log (Settings → Send logs
to clipboard), and the exact steps that triggered the problem.
## Client / patcher
### "Signature verification failed" on launch
The image-signing public key baked into the patched `global-metadata.dat`
doesn't match the private key on the server. Repair from the Patch tab —
this re-fetches the server's current pubkey before patching.
### "Check your internet connection" loop at startup
The watch can't reach the server URL. Verify:
1. The host string in `dorknet-clientmod.json` matches the server's
current join-code URL. (Localtunnel hands out a fresh
`<random>.loca.lt` URL on every host restart — the joiner needs the
most recent code.)
2. Open `https://<host>/healthz` in a browser from the joiner's machine
and confirm a `200 OK`. If you instead see Localtunnel's "Click to
Continue" page, click through once and retry the connect.
3. No corporate proxy / DNS filter is intercepting `loca.lt` /
`sslip.io`.
### Black screen after the loading bar fills
The watch authenticated, joined Photon, but couldn't download the room
data blob. Look in MelonLoader's `Latest.log` for
`[DownloadRoomDataBlobCoroutine]` lines — the URL there tells you which
asset the server failed to serve.
### Save doesn't persist, MakerPen objects disappear after reload
Known issue with stale `LocalRoomScene.DataBlobName`. The client mod's
`SetRoomDataBlobName_Prefix` hijack should handle this — verify it's
firing in MelonLoader's log. If not, the mod failed to load; check that
`Mods\DorkNet.ClientMod.dll` is present and not blocked by Windows.
## Server
### `[boot] migrations failed`
The schema patch SQL errored. Most likely cause: an existing column whose
type doesn't match what we're trying to add. Look at the exact failure
in the log; if it's a Postgres `cannot alter type` error, the prior
column type needs a manual migration before DorkNet starts.
### Photon CustomAuth returns 401
Either:
- The Photon AppId in `appsettings` doesn't match the AppId baked into
the patched client. They MUST match.
- The user logging in doesn't have a row in the `Players` table — the
auth flow expects `userid` to be a real account.
### Room chat doesn't send
Run the client with `SaveDebugMod` enabled (or watch MelonLoader's log)
and look for the `[chat-trace]` lines. The pipeline is:
```
SendChatEmote → RemoveInvalidCharactersFromMessage → PurifyString HTTP
→ ProcessNewChatMessageReceived → Photon RPC
```
If any trace line is missing, that's where it died. The two most common
fixes:
- `[chat-fix] CanLocalPlayerChat returned false`: the account is flagged
as a Junior with chat disabled. Force-true via the client mod (default
behavior) or fix it server-side in admin.
- `Received malformed RecNet response`: the `/api/sanitize/v1` endpoint
returned the wrong shape. Should be a bare JSON-quoted string. See
`SanitizeController.cs`.
## Easy app
### "Localtunnel couldn't get a URL"
DorkNet shells out to the Localtunnel client and waits for it to
report back with a `*.loca.lt` URL. If that fails, the most common
causes are:
- Localtunnel's service is rate-limiting / down — wait a couple
minutes and retry, or switch to LAN mode if friends are local.
- No Node.js / `npx` available for the fallback path (the launcher
bundles a .NET Localtunnel client, but if both that and `npx`
fail you'll see this). Install Node.js 16+ from
[nodejs.org](https://nodejs.org/) and click Retry.
- Outbound HTTPS to `loca.lt` is blocked (corporate firewall, DNS
filter). Switch to LAN mode or use the wildcard option with your
own apex.
### Patch button is greyed out
DorkNet didn't find a Rec Room install at the path you selected. Make
sure you pointed at the *folder* containing `Recroom_Release.exe`, not
the exe itself, and that `Recroom_Release_Data/` exists alongside.
### Mode switch lost my server data
Switching from Host mode → Join mode preserves the SQLite database; it
just stops auto-starting the server. Switch back to Host mode and your
players / rooms / images are still there.
If the data really is gone, check `%APPDATA%\DorkNet\dorknet.db` — that
file is the entire host-side state, easy to copy elsewhere as a backup.