Files
TeslaSuite/Console
CydandClaude Fable 5 3fd637c58a Add vPOD: a virtual pod / game-client stand-in for testing the consoles
vPOD impersonates a Tesla game client (rpl4opt.exe / btl4.exe) so the Red
Planet and BattleTech operator consoles can be exercised without real cockpit
hardware. New net48 WinForms project under Console\vPOD:

- MungaPodServer: the server half of the Munga control protocol (TCP 1501).
  The vendored MungaSocket is client-only, so this reimplements the identical
  framing ([16-byte header][12-byte base + body], dispatched by
  ClientID+MessageID) for the listening side, reusing the vendored message
  classes' WriteTo/BinaryReader serialization.
- PodSimulator: the ApplicationState machine driven by the console's messages -
  answers StateQuery, reassembles the streamed egg and acknowledges it, and
  walks WaitingForEgg -> LoadingMission -> WaitingForLaunch -> RunningMission
  and back on Run/Stop/Abort/Suspend/Resume.
- VPodForm: live display of listening/connection status, the colour-coded
  ApplicationState, an egg viewer (fields + summary), and a newest-first
  protocol log. A Red Planet / BattleTech toggle changes which ApplicationID
  the pod reports, live, so one vPOD stands in for either game.
- PodArguments: parses the real client's launch flags (-net/-app/-lc/-mr/
  -host/-res).

Deployable from Manage Site -> Install Product: a catalog product in
RedPlanet\Apps.xml (Game Client / Live Camera / Mission Review entries) plus
pack.ps1, which builds dist\vPOD.zip laying out vPOD\vPOD.exe for the launcher
to extract to C:\Games\vPOD. CatalogTests updated to 5 products / 11 entries
with the four vPOD entry assertions (88/88 pass). TeslaConsole.csproj excludes
vPOD\** from its **/*.cs glob; the project is added to the solution.

Verified end-to-end over real TCP: a console-role client using the vendored
MungaSocket drives connect -> WaitingForEgg -> stream egg -> (ack) ->
WaitingForLaunch -> Run -> RunningMission -> Stop -> WaitingForEgg, with vPOD
reporting the correct state at each step. MungaGame (what the console's game
windows use) is a thin wrapper over MungaSocket, so this exercises the exact
wire behaviour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 09:34:53 -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).