mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 23:18:44 -07:00
bcc5fe1bcb
- 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
4.3 KiB
4.3 KiB
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.
# 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:
{ "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
- User clicks Start server.
HostMode.ServerLauncherboots the ASP.NET Core host in-process, wired to a SQLite DB at%APPDATA%\DorkNet\dorknet.db.HostMode.TunnelManagerspawnscloudflared tunnel --url http://localhost:5000, reads the public URL off stderr.- UI surfaces the URL + a "Copy join code" button. Join code is
base64(
{host, photonAppId, photonRegion, name}).
Join mode lifecycle
- User pastes a join code (or clicks a
dorknet://URL — the installer registers the protocol handler). JoinMode.CodeParserdecodes, ping-checks the host, shows a "Connecting to X" preview.- User points at their Rec Room install (auto-detected via
RecRoomInstallFinderif Steam owns it). Shared.Patcherpatchesglobal-metadata.dat, drops MelonLoader, writesdorknet-clientmod.jsonwith the decoded host + Photon AppId.- UI offers a "Launch Rec Room" button — runs
Recroom_Release.exedirectly, no Steam intermediary needed.
Auto-updates
Velopack 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.