Files
TeslaSuite/Console
CydandClaude Fable 5 fd0c8c5196 vPOD: pod power controls, end-mission restart cycle, egg viewer polish
Adds pod-lifecycle controls to the vPOD window:

- Power Off / Power On: Power Off closes the TCP listener so the console can no
  longer connect, mimicking a pod with no game client running; Power On reopens
  it. The listener close/open is the faithful signal a console sees.
- End-mission graceful-exit + watchdog restart: on the end-mission command
  (StopMission) the game exits gracefully (listener closes, connection drops)
  and a watchdog relaunches it about 1.5 s later, coming back up in
  WaitingForEgg - the real pod's per-game cycle. A "Restart game after mission
  ends (watchdog)" checkbox (default on) toggles it; unchecked, the pod just
  returns to WaitingForEgg without exiting.
- Egg viewer: the last egg is kept across missions/restarts (no auto-clear) so
  it can be copied for dev use; a Clear button empties it on demand.
- Log pane defaults to half the window (egg lines are rarely wide); the split
  is set at load once the control has its real width.

Verified over real TCP: driving egg -> run -> end-mission makes the listener
drop then reopen with the pod back in WaitingForEgg (confirmed in vPOD's own
log: "Game exited gracefully" then "Watchdog restarted the game").

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:43:44 -05:00
..

TeslaConsole

Reconstructed C# source for the original TeslaConsole.exe — the operator console that drives the cockpit pods (the counterpart to TeslaLauncherService / TeslaLauncherAgent).

Provenance

This source was recovered by decompiling the original managed assembly with ILSpy (ilspycmd 7.2). The original TeslaConsole.exe is a .NET Framework 2.0 WinForms application (assets/Tesla Console/TeslaConsole.exe, dated 2012). The reconstructed project here is retargeted to .NET Framework 4.8 so it builds with current tooling; it is otherwise a faithful decompilation, not a rewrite.

Decompiled code is functionally equivalent to the original but not character-for-character identical to the lost sources. Local variable names, some control flow, and compiler-generated members differ. Treat this as a recovered baseline, not pristine source.

Dependencies

The console references these assemblies. Most are vendored as binaries under lib/ (copied from assets/Tesla Console/):

Assembly Origin
WeifenLuo.WinFormsUI.Docking.dll Third-party docking UI (open source, see assets/Tesla Console/WeifenLuo.txt)
TeslaConsoleLaunchLib.dll Wire types / launch protocol — now built from source (see below)
TeslaSecureConfiguration.dll First-boot secure config protocol — now built from source (see below)
Munga Net.dll Managed C# client for the Red Planet game's Munga protocol (TCP 1501); manual binary serialization, no BinaryFormatter (proprietary, vendored)
BitmapLibrary.dll Plasma-display bitmap rendering (proprietary, vendored)

The Red Planet game itself is C++ and lives in its own repo (c:\vwe\rp411 / gitea.mysticmachines.com/VWE/RP411.git). That source defines the Munga protocol but is not a drop-in for the managed Munga Net.dll above, so it is not vendored here.

Two of these are no longer vendored binaries — they are built from source and shared across the suite:

  • TeslaConsoleLaunchLib../Contract/Tesla.Contract.csproj, a net48 project: the single source of truth for the Console↔Launcher RPC contract (wire types, the PodManagerConnection client, and the framed-JSON PodRpc protocol), shared with the Launcher Service. The assembly keeps the TeslaConsoleLaunchLib name so the original-exe baseline still resolves in the differential tests; the wire no longer embeds assembly names (see RPC note below).
  • TeslaSecureConfiguration../SecureConfig/Tesla.SecureConfig.csproj (net48), the first-boot provisioning protocol (UDP beacons, OFB crypto, RSA key exchange).

The original TeslaSecureConfiguration.dll is retained under lib/ as the baseline for the byte-identical crypto guard (SecureConfigCompatTests). The remaining vendored assemblies (Munga Net, BitmapLibrary) are .NET 2.0 managed and could be decompiled to source the same way if full-source builds are needed.

Console ↔ Launcher RPC (no BinaryFormatter)

The pod-management channel (TCP 53290) runs length-prefixed System.Text.Json frames over the existing OFB-encrypted stream — see Contract/PodRpcProtocol.cs, shared verbatim by both ends. This replaced the original BinaryFormatter + serialized-MethodBase scheme (a remote-code-execution sink, and what had pinned the Launcher to an old runtime); dispatch is now by method-name string. The Launcher Service/Agent target net48, same as the Console. Note the Console still uses BinaryFormatter for local disk persistence (Site config, mission results) — that is local file I/O on net48, not the network surface, and is intentionally left alone.

Layout

This folder is self-contained — it can be lifted out into its own repository and still build and run.

TeslaConsole/
  *.cs, TeslaConsole.*/    decompiled source (by namespace)
  *.resx, app.ico          embedded resources + icon
  TeslaConsole.csproj      net48 project
  RedPlanet/               runtime content (RPConfig.xml, RPStrings.xml) — copied to output
  images/                  source art (pod art / maps / vehicles) — reference only
  installer_banner.bmp     installer artwork — reference only
  lib/                     referenced binaries + WeifenLuo license
  original/                original TeslaConsole.exe + .InstallState — reference baseline

Building

Requirements: .NET SDK (6.0+) — the Microsoft.NETFramework.ReferenceAssemblies NuGet package supplies the net48 reference assemblies, so a standalone Framework targeting pack is not required.

dotnet build TeslaConsole.csproj -c Release

Output: bin/Release/net48/TeslaConsole.exe (with RedPlanet/ and all dependency DLLs copied alongside it).

Runtime content

  • RedPlanet\RPConfig.xml, RedPlanet\RPStrings.xml are loaded relative to the exe and are copied to the build output automatically.
  • Plasma Images\*.bmp (under %ProgramData%) is an optional override set; when absent the console renders plasma-display text procedurally, so it is not required to build or run.

Notes

  • The .resx resources embed BinaryFormatter-serialized bitmaps. The project sets GenerateResourceUsePreserializedResources and references System.Resources.Extensions so these build under the modern SDK.
  • Namespaces: TeslaConsole (UI + pod management), TeslaConsole.RedPlanet (the Red Planet game scenario/mission model), TeslaConsole.Properties (settings + resources).