Files
TeslaSuite/Launcher/README.md
T
CydandClaude Opus 4.8 548550b312 Initial commit: TeslaSuite monorepo (TeslaConsole + TeslaLauncher)
Co-locate the two cockpit-pod projects into a single repository:

- Console/  : TeslaConsole, the net48 WinForms operator console (decompiled
              reconstruction) plus its differential + catalog test suite.
- Launcher/ : TeslaLauncher, the net6 pod-side Service + Agent rewrite.

Adds a combined TeslaSuite.sln, root README documenting the shared wire
contract (and its current duplication, the main follow-up), and a root
.gitignore. Histories were not preserved per request; this is a fresh start
from the current working state of both projects.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:43:28 -05:00

111 lines
4.3 KiB
Markdown

# TeslaLauncher
.NET 6 rewrite of the original Elsewhen Studios LLC software (Windows 2000 / .NET Framework 2.0).
## Architecture
TeslaLauncher has three components that work together:
### TeslaLauncherService (Windows Service, Session 0)
- Runs at boot before any user logs in
- Listens on **TCP 53290** for OFB-encrypted BinaryFormatter RPC from TeslaConsole
- Forwards commands to the Agent via Named Pipe (`TeslaLauncherIPC`)
- Handles first-boot network configuration (SecureConfig)
- Handles game file transfers from the Console (InstallProduct)
### TeslaLauncherAgent (WinForms tray app, user session)
- Runs in the logged-in user's desktop session
- Executes commands that require desktop access: launching/killing apps, volume control
- Manages `LaunchApps.xml` (installed games registry)
- On first boot, displays SecureConfig Request ID and Passphrase
### SecureConfig (first-boot protocol)
- Assigns a temporary IP and broadcasts a UDP beacon so the Console can discover the pod
- Operator reads the Passphrase off the pod screen and enters it into the Console
- Console sends AES-encrypted network configuration (IP, mask, gateway, DNS, hostname)
- TCP handshake establishes an OFB-encrypted session with RSA key exchange
- Session key is saved for all subsequent Console connections
## Communication Flow
```
TeslaConsole ──TCP 53290 (OFB + BinaryFormatter)──> TeslaLauncherService
Named Pipe (JSON)
v
TeslaLauncherAgent
```
## Files
| File | Description |
|------|-------------|
| `TeslaLauncherService.cs` | Windows Service implementation |
| `TeslaLauncherService.csproj` | Service project (net6.0-windows, x86, self-contained) |
| `TeslaLauncherAgent.cs` | Userspace Agent implementation |
| `TeslaLauncherAgent.csproj` | Agent project (WinForms, net6.0-windows, x86) |
| `LaunchModels_Shared.cs` | Wire types (Tesla.Net) and IPC types (Tesla.Launcher.Shared) |
| `SecureConfig.cs` | First-boot secure configuration protocol |
| `build.bat` | Builds both components |
| `install.bat` | Installs on a cockpit PC (run as Administrator) |
## Building
Requirements:
- .NET 6 SDK
- Internet access for NuGet restore
```
build.bat :: build both components
build.bat /service :: build Service only
build.bat /agent :: build Agent only
```
Output goes to `TeslaLauncher\` with `Service\` and `Agent\` subdirectories.
## Installation
1. Copy the `TeslaLauncher\` folder to each cockpit PC
2. Run `TeslaLauncher\install.bat` as Administrator
The installer:
- Registers the Service (delayed auto-start)
- Configures the Agent for auto-login startup
- Installs OpenAL and DirectX runtimes
- Enables SMB1 file sharing
- Creates `C:\Games` with appropriate permissions
- Resets network adapters to DHCP for SecureConfig
## First Boot
1. Cockpit boots with DHCP (unconfigured state)
2. Service runs SecureConfig: broadcasts beacon, displays codes on screen
3. Console operator sees the pod's Request ID and enters the Passphrase
4. Console sends encrypted network configuration
5. Pod applies the configuration and is ready for normal operation
## Normal Operation
The Console connects to each configured pod on TCP 53290 and can:
- Install/uninstall simulation games
- Launch/kill applications
- Get/set volume level
- Query pod status (FullUpdate)
- Shutdown or reboot the pod
## Key Paths
| Path | Purpose |
|------|---------|
| `C:\ProgramData\TeslaLauncher\TeslaKeyStore.key` | Session key (32 bytes) |
| `C:\ProgramData\TeslaLauncher\LaunchApps.xml` | Installed games registry |
| `C:\ProgramData\TeslaLauncher\configuring.json` | Transient: SecureConfig codes for Agent display |
| `C:\Games\` | Game installation directory |
## Wire Protocol
The Console uses BinaryFormatter over OFB-encrypted TCP streams. All types in the `Tesla.Net` namespace are exact replicas of the original structs from `TeslaConsoleLaunchLib.dll` to maintain serialization compatibility.
The Service-to-Agent IPC uses length-prefixed JSON over a Named Pipe, with flat types that avoid the nested struct layout of the wire format.