Add initial documentation and structure for DorkNet project

- Create README.md for project overview and setup instructions
- Add admin-ui/README.md for admin UI details and development setup
- Introduce client-mod/README.md explaining the MelonLoader mod functionality
- Establish docker/README.md for Docker setup and configuration
- Create docs/README.md to index project documentation
- Implement advanced-setup.md for Docker stack configuration
- Document architecture in architecture.md
- Provide easy-setup.md for hosting instructions
- Add FAQ.md for common questions and legal considerations
- Create joining-a-server.md for player connection instructions
- Establish troubleshooting.md for common issues and resolutions
- Introduce easy-app/README.md for the unified desktop application
- Add server/README.md for ASP.NET Core backend details
- Document tools/README.md for CLI helper scripts
This commit is contained in:
Alexa
2026-05-21 13:26:46 +03:00
commit bcc5fe1bcb
18 changed files with 1752 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
# DorkNet Easy App
The unified desktop app for hosts and guests. One binary, two modes.
## Project layout
```
easy-app/
├── Shell/ PhotinoNET window host, mode router, settings store,
│ auto-updater, system tray, log viewer.
├── HostMode/ Tunnel manager (cloudflared wrapper), server lifecycle
│ (start/stop the in-process ASP.NET Core), share-code
│ generation.
├── JoinMode/ Join-code parser (dorknet:// URL handler), connection
│ sanity-check, server reachability ping.
├── Shared/ Patcher library (port of tools/patch-client.ps1 to C#),
│ ConfigManager, RecRoomInstallFinder (Steam library scan),
│ ImageSigningKeyManager (auto-generate on first run).
└── Resources/ Icons, admin-ui dist (bundled at build time),
cloudflared.exe, MelonLoader/, mod DLLs.
```
## Build flow
`Resources/admin-ui-dist/` is the production build output from
`../admin-ui/` — copied in by a pre-build task so the Photino webview can
serve it as the host-mode admin tab.
```pwsh
# One-shot dev build
pwsh tools/build-easy-app.ps1
# Release artifact
dotnet publish easy-app -c Release -r win-x64 --self-contained \
-p:PublishSingleFile=true -p:PublishTrimmed=false
# → bin/Release/net9.0/win-x64/publish/dorknet.exe (~80 MB)
```
## Why PhotinoNET
- The admin UI is already a webview-friendly React SPA. Embedding it in a
Photino window is essentially free.
- Single .NET project. No Node toolchain in the desktop build, no Electron.
- Bundled binary ~50 MB before the runtime, ~80 MB with self-contained
.NET. Acceptable for one-time downloads.
## Why not Electron / Tauri / Avalonia
- **Electron**: doubles the binary size, adds Node into the supply chain.
- **Tauri**: Rust dependency we don't otherwise need; mixing it with the
existing .NET server complicates the build matrix.
- **Avalonia**: native, beautiful, but means re-implementing the admin
UI a second time. The point of unified Host mode is *reuse* the admin
SPA verbatim.
## Modes — first-run decision
`Shared/ConfigManager` writes `%APPDATA%\DorkNet\mode.json`:
```json
{ "mode": "host" }
```
`Shell` reads this on startup. Missing or `null` → first-run wizard.
Settings → "Switch mode" sets `mode` to the other value, restarts the
process clean (Photino re-init).
## Host mode lifecycle
1. User clicks Start server.
2. `HostMode.ServerLauncher` boots the ASP.NET Core host in-process,
wired to a SQLite DB at `%APPDATA%\DorkNet\dorknet.db`.
3. `HostMode.TunnelManager` spawns `cloudflared tunnel --url
http://localhost:5000`, reads the public URL off stderr.
4. UI surfaces the URL + a "Copy join code" button. Join code is
base64(`{host, photonAppId, photonRegion, name}`).
## Join mode lifecycle
1. User pastes a join code (or clicks a `dorknet://` URL — the installer
registers the protocol handler).
2. `JoinMode.CodeParser` decodes, ping-checks the host, shows a
"Connecting to X" preview.
3. User points at their Rec Room install (auto-detected via
`RecRoomInstallFinder` if Steam owns it).
4. `Shared.Patcher` patches `global-metadata.dat`, drops MelonLoader,
writes `dorknet-clientmod.json` with the decoded host + Photon AppId.
5. UI offers a "Launch Rec Room" button — runs `Recroom_Release.exe`
directly, no Steam intermediary needed.
## Auto-updates
[Velopack](https://velopack.io) is the path of least resistance for .NET
desktop. Drop-in: declare a GitHub Release feed, ship updates as deltas.
## Testing
QA matrix to maintain:
- Fresh Windows 10 VM, no Rec Room → install Steam → buy / depot-download
the 2020 build → DorkNet host mode → patch + start + tunnel → connect
from a second VM via Join mode. End-to-end smoke test.
- Mac M1 + Linux: deferred. PhotinoNET supports them but we need separate
cloudflared binaries and a packaging step per OS.
## Open questions
- [ ] Code-signing cert. SmartScreen warning is a major adoption friction.
EV cert is ~$200/yr; standard cert is cheaper but takes longer to build
reputation.
- [ ] Crash reporting. Sentry has a generous free tier and a clean .NET SDK.
- [ ] Telemetry — opt-in? Off by default? Right now: no plans, but
document the position so contributors know.