mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
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:
@@ -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.
|
||||
Reference in New Issue
Block a user