diff --git a/Console/RedPlanet/Apps.xml b/Console/RedPlanet/Apps.xml index 206ed18..edf6281 100644 --- a/Console/RedPlanet/Apps.xml +++ b/Console/RedPlanet/Apps.xml @@ -113,10 +113,10 @@ + (vPOD\ at the repo root). Speaks Munga on 1501 like a real + rpl4opt.exe/btl4.exe and reports either ApplicationID (toggled live in + its window). Deploy it to a pod exactly like a real client; the package + (vPOD\dist\vPOD.zip, built by pack.ps1) extracts to C:\Games\vPOD. --> - - - - diff --git a/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj b/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj index ee40fc5..3f7f82a 100644 --- a/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj +++ b/Console/tests/TeslaConsole.DiffTests/TeslaConsole.DiffTests.csproj @@ -57,7 +57,7 @@ - + diff --git a/README.md b/README.md index ecdae3b..79e226c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ The Tesla cockpit-pod software, in one repository: | [`Launcher/`](Launcher/) | **TeslaLauncher** — the pod-side Service (Session 0 RPC listener) + Agent (user-session app launcher). A clean rewrite of the original launcher. | .NET Framework 4.8 | | [`Contract/`](Contract/) | **Tesla.Contract** — the shared Console↔Launcher RPC contract: wire types, the client, and the framed-JSON protocol. Emits assembly `TeslaConsoleLaunchLib`. | .NET Framework 4.8 | | [`SecureConfig/`](SecureConfig/) | **Tesla.SecureConfig** — the first-boot pod provisioning protocol (UDP beacons, OFB crypto, RSA key exchange). Emits assembly `TeslaSecureConfiguration`. | .NET Framework 4.8 | +| [`vPOD/`](vPOD/) | **vPOD** — a virtual pod for testing the consoles without cockpit hardware: impersonates both the game client (Munga, TCP 1501) and the pod's TeslaLauncher service (provisioning + Site Management / Install Product on TCP 53290). | .NET Framework 4.8 | The console and launcher talk over **TCP 53290** using **length-prefixed `System.Text.Json` frames over an OFB-encrypted stream** ([`Contract/PodRpcProtocol.cs`](Contract/PodRpcProtocol.cs)), @@ -32,7 +33,9 @@ install, since .NET Framework 4.8 ships in Windows 10/11), and [`Launcher/install.bat`](Launcher/install.bat) deploys it on a cockpit PC (registers the Service, sets up the Agent for auto-login, hardens the box). The operator console packages the same way: [`Console/build-package.bat`](Console/build-package.bat) → `Console/dist/`, -installed with [`Console/install.bat`](Console/install.bat). +installed with [`Console/install.bat`](Console/install.bat). vPOD packages with +[`vPOD/pack.ps1`](vPOD/pack.ps1) → `vPOD/dist/vPOD.zip`, deployable to a pod via the +console's Install Product (or run directly on any machine). ## Layout notes diff --git a/TeslaSuite.sln b/TeslaSuite.sln index 0ac4d94..9313102 100644 --- a/TeslaSuite.sln +++ b/TeslaSuite.sln @@ -19,16 +19,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tesla.Contract", "Contract\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tesla.SecureConfig", "SecureConfig\Tesla.SecureConfig.csproj", "{070A6093-6C46-4A5B-A119-47ED195530E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vPOD", "Console\vPOD\vPOD.csproj", "{9EAC97A1-D71A-4AAB-9957-A79A1587D406}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vPOD", "vPOD\vPOD.csproj", "{9EAC97A1-D71A-4AAB-9957-A79A1587D406}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {27285664-95C3-49FB-95BA-A34721060BF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {27285664-95C3-49FB-95BA-A34721060BF1}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -59,9 +56,11 @@ Global {9EAC97A1-D71A-4AAB-9957-A79A1587D406}.Release|Any CPU.ActiveCfg = Release|Any CPU {9EAC97A1-D71A-4AAB-9957-A79A1587D406}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection GlobalSection(NestedProjects) = preSolution {27C769F3-F07F-456E-ACB7-F4A4A21AB6D1} = {91E92ADD-9F67-41E4-B43C-CCB7B2D95F15} {467AA87A-FBD4-45D7-B8F8-9336C95884D2} = {27C769F3-F07F-456E-ACB7-F4A4A21AB6D1} - {9EAC97A1-D71A-4AAB-9957-A79A1587D406} = {91E92ADD-9F67-41E4-B43C-CCB7B2D95F15} EndGlobalSection EndGlobal diff --git a/Console/vPOD/.gitignore b/vPOD/.gitignore similarity index 100% rename from Console/vPOD/.gitignore rename to vPOD/.gitignore diff --git a/Console/vPOD/LauncherRpcServer.cs b/vPOD/LauncherRpcServer.cs similarity index 100% rename from Console/vPOD/LauncherRpcServer.cs rename to vPOD/LauncherRpcServer.cs diff --git a/Console/vPOD/MungaPodServer.cs b/vPOD/MungaPodServer.cs similarity index 100% rename from Console/vPOD/MungaPodServer.cs rename to vPOD/MungaPodServer.cs diff --git a/Console/vPOD/PodArguments.cs b/vPOD/PodArguments.cs similarity index 100% rename from Console/vPOD/PodArguments.cs rename to vPOD/PodArguments.cs diff --git a/Console/vPOD/PodProvisioning.cs b/vPOD/PodProvisioning.cs similarity index 100% rename from Console/vPOD/PodProvisioning.cs rename to vPOD/PodProvisioning.cs diff --git a/Console/vPOD/PodSimulator.cs b/vPOD/PodSimulator.cs similarity index 100% rename from Console/vPOD/PodSimulator.cs rename to vPOD/PodSimulator.cs diff --git a/Console/vPOD/Program.cs b/vPOD/Program.cs similarity index 100% rename from Console/vPOD/Program.cs rename to vPOD/Program.cs diff --git a/Console/vPOD/README.md b/vPOD/README.md similarity index 98% rename from Console/vPOD/README.md rename to vPOD/README.md index 90fd0eb..b7691e8 100644 --- a/Console/vPOD/README.md +++ b/vPOD/README.md @@ -136,7 +136,7 @@ An end-to-end loopback test of this server against the console's real ## Deploying from the console (Manage Site → Install Product) -vPOD is a catalog product (`RedPlanet\Apps.xml`, id `0041C870-…`) with Game +vPOD is a catalog product (`Console\RedPlanet\Apps.xml`, id `0041C870-…`) with Game Client / Live Camera / Mission Review entries, so it appears in **Manage Site → Install Product** like any game. Build the deployable package first: diff --git a/Console/vPOD/VPodForm.cs b/vPOD/VPodForm.cs similarity index 100% rename from Console/vPOD/VPodForm.cs rename to vPOD/VPodForm.cs diff --git a/Console/vPOD/VirtualLauncher.cs b/vPOD/VirtualLauncher.cs similarity index 100% rename from Console/vPOD/VirtualLauncher.cs rename to vPOD/VirtualLauncher.cs diff --git a/Console/vPOD/pack.ps1 b/vPOD/pack.ps1 similarity index 100% rename from Console/vPOD/pack.ps1 rename to vPOD/pack.ps1 diff --git a/Console/vPOD/vPOD.csproj b/vPOD/vPOD.csproj similarity index 83% rename from Console/vPOD/vPOD.csproj rename to vPOD/vPOD.csproj index 6efa382..0e0d237 100644 --- a/Console/vPOD/vPOD.csproj +++ b/vPOD/vPOD.csproj @@ -8,7 +8,7 @@ console connects to it exactly as it would a real rpl4opt.exe / btl4.exe), emulates the pod ApplicationState machine, reassembles the streamed egg, and shows both on a live display. Deployable to a pod machine via the - console's Manage Site -> Install Product (see dist\ + RedPlanet\Apps.xml). + console's Manage Site -> Install Product (see dist\ + Console\RedPlanet\Apps.xml). net48 to match the rest of the suite and the vendored Munga Net.dll. --> @@ -45,10 +45,11 @@ - + - ..\lib\Munga Net.dll + ..\Console\lib\Munga Net.dll true @@ -59,8 +60,8 @@ PodRpc framing + ILauncherService wire types, and the SecureConfig provisioning protocol + OFB crypto-stream handshake. vPOD implements the SERVER side of the existing contract only - no new RPCs. --> - - + +