mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 23:18:44 -07:00
83 lines
3.3 KiB
Markdown
83 lines
3.3 KiB
Markdown
# DorkNet Launcher
|
|
|
|
Single-download desktop launcher for self-hosting / joining DorkNet
|
|
servers. **Native WPF** — no embedded browser, no WebView2 dependency.
|
|
.NET 9 single-file self-contained build.
|
|
|
|
This README is for **developers** of the launcher. End-users see
|
|
[the main README](../README.md) and download a prebuilt `.exe` from
|
|
[Releases](https://github.com/DorkSquadRR/DorkNet/releases).
|
|
|
|
## What it does
|
|
|
|
- **Host mode:** fetches the matching server binary from GitHub
|
|
Releases for the user's picked Rec Room version, runs it as a
|
|
subprocess and exposes it through a Localtunnel HTTPS URL (or
|
|
binds on the LAN if the user picked that mode), patches the
|
|
user's Rec Room install, hands the user a shareable join code.
|
|
- **Join mode:** parses the join code, fetches the matching client
|
|
patcher from GitHub Releases, patches the user's Rec Room install
|
|
to point at the host.
|
|
|
|
## Layout
|
|
|
|
```
|
|
launcher/
|
|
├── DorkNet.Launcher.csproj .NET 9 WPF, single-file self-contained
|
|
├── App.xaml + App.xaml.cs WPF Application bootstrap, dark-theme palette
|
|
├── MainWindow.xaml All views (first-run / host / join / settings)
|
|
├── MainWindow.xaml.cs Code-behind: event handlers → Backend/* calls
|
|
├── app.manifest Windows DPI-awareness manifest
|
|
└── Backend/ Orchestration — UI-framework-agnostic
|
|
├── AppPaths.cs %APPDATA%\DorkNet layout
|
|
├── AppState.cs Persisted user choices (mode, paths, Photon AppId)
|
|
├── VersionsManifest.cs Fetches versions.json from main
|
|
├── ReleaseDownloader.cs GitHub Releases API + artifact unpack
|
|
├── ServerProcess.cs Spawns the downloaded server binary
|
|
├── ClientPatcher.cs Applies the manifest-based patcher zip
|
|
├── LocaltunnelInstaller.cs Downloads the Localtunnel .NET client
|
|
├── LocaltunnelTunnel.cs Spawns the tunnel + parses the *.loca.lt URL
|
|
├── RecRoomPicker.cs Microsoft.Win32.OpenFolderDialog
|
|
└── JoinCode.cs base64url-encoded {host, version, photonAppId, …}
|
|
```
|
|
|
|
`MainWindow.xaml` holds all four views (first-run wizard, host, join,
|
|
settings) as sibling panels; code-behind toggles `Visibility` to
|
|
switch between them. No MVVM framework — direct event handlers in
|
|
the code-behind read/write `Backend/*` services.
|
|
|
|
## Build + run
|
|
|
|
```pwsh
|
|
cd launcher
|
|
dotnet run
|
|
```
|
|
|
|
Window opens immediately on the first-run wizard.
|
|
|
|
## Publish a self-contained .exe
|
|
|
|
```pwsh
|
|
dotnet publish -c Release
|
|
# Output: bin\Release\net9.0-windows\win-x64\publish\dorknet.exe (~70 MB)
|
|
```
|
|
|
|
The published exe is what ships in GitHub Releases on `main` (use the
|
|
launcher release workflow once it exists).
|
|
|
|
## Dependencies on per-version branches
|
|
|
|
The launcher fetches release files from GitHub Releases tagged on
|
|
the per-version branches. See [RELEASES.md](RELEASES.md) for the
|
|
exact naming convention each branch must follow.
|
|
|
|
## Adding a new feature
|
|
|
|
1. New backend logic → add to (or create) a `Backend/*.cs` class.
|
|
2. New UI controls → add XAML in `MainWindow.xaml`.
|
|
3. New event handlers → method in `MainWindow.xaml.cs` calling the
|
|
backend service.
|
|
|
|
Keep code-behind handlers small: they marshal between WPF dispatcher
|
|
thread + the backend services. Long work goes in `Backend/*`.
|