From 2047c84d8d10fa958999e886fb7add66758317ad Mon Sep 17 00:00:00 2001 From: Kilian Hofmann Date: Thu, 19 Jun 2025 16:05:54 +0200 Subject: [PATCH] Fix SB persist --- .../src/components/SBEntry/SBEntryF.tsx | 16 +++---- .../src/components/SBEntry/SBEntryPax.tsx | 22 ++++------ PackageSources/js-bundle/src/utils/utils.ts | 33 +++++++-------- PackageSources/wasm-module/load-manager.cpp | 42 ++++++++++++------- PackageSources/wasm-module/types.h | 3 ++ 5 files changed, 59 insertions(+), 57 deletions(-) diff --git a/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx b/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx index 9682fb1..8912839 100644 --- a/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx +++ b/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx @@ -1,4 +1,4 @@ -import { FC, useEffect, useRef, useState } from 'react'; +import { FC, useEffect, useState } from 'react'; import { GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED } from '../../constants'; import { WASMDataF } from '../../types/WASMData'; import { LoadingState, SimBrief } from '../../types/general'; @@ -18,11 +18,8 @@ const SBEntryF: FC = ({ WASMData, loadingState, username, setLoadi const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); - const [SBPlan, setSBPlan] = useState(); const [SBInFlight, setSBInFlight] = useState(false); - const cargo = useRef(0); - const ZFW = () => { if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); @@ -75,11 +72,8 @@ const SBEntryF: FC = ({ WASMData, loadingState, username, setLoadi return; } - cargo.current = parseFloat(SBResponse.message.cargo) ?? 0; - updateData(undefined, SBResponse.message); - setSBPlan(SBResponse.message); setFuel(parseFloat(SBResponse.message.fuel) ?? 0); setSBInFlight(false); }; @@ -96,8 +90,8 @@ const SBEntryF: FC = ({ WASMData, loadingState, username, setLoadi setFuelEnabled(inRangeOf(Math.round(WASMData.livePayload.fuel), fuel)); }, [WASMData.livePayload.fuel]); - const updateData = (_CGTarget?: number, _SBPlan?: SimBrief) => { - CoherentCallSBEntryF(cargo.current ?? 0, _CGTarget ?? CGTarget, _SBPlan ?? SBPlan); + const updateData = (_CGTarget?: number, SBPlan?: SimBrief) => { + CoherentCallSBEntryF(_CGTarget ?? CGTarget, SBPlan); }; return ( @@ -139,7 +133,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, username, setLoadi type="text" placeholder="" className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" - value={SBPlan?.plannedZFW ?? WASMData.sbPlanned.ZFW} + value={WASMData.sbPlanned.ZFW} disabled /> @@ -149,7 +143,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, username, setLoadi type="text" placeholder="" className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" - value={SBPlan?.plannedGW ?? WASMData.sbPlanned.GW} + value={WASMData.sbPlanned.GW} disabled /> diff --git a/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx b/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx index 1bd613d..3ebdc50 100644 --- a/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx +++ b/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx @@ -1,4 +1,4 @@ -import { FC, useEffect, useRef, useState } from 'react'; +import { FC, useEffect, useState } from 'react'; import { GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED } from '../../constants'; import { WASMDataPax } from '../../types/WASMData'; import { LoadingState, SimBrief } from '../../types/general'; @@ -18,12 +18,8 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); - const [SBPlan, setSBPlan] = useState(); const [SBInFlight, setSBInFlight] = useState(false); - const numPax = useRef(0); - const cargo = useRef(0); - const ZFW = () => { if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); @@ -76,12 +72,8 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa return; } - cargo.current = parseFloat(SBResponse.message.cargo) ?? 0; - numPax.current = parseInt(SBResponse.message.pax) ?? 0; + updateData(undefined, SBResponse.message); - updateData(SBResponse.message); - - setSBPlan(SBResponse.message); setFuel(parseFloat(SBResponse.message.fuel) ?? 0); setSBInFlight(false); }; @@ -95,11 +87,11 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa [WASMData.userData.isER] ); useEffect(() => { - setFuelEnabled(inRangeOf(Math.round(WASMData.livePayload.fuel), fuel)); + setFuelEnabled((prev) => (!prev ? inRangeOf(Math.round(WASMData.livePayload.fuel), fuel) : prev)); }, [WASMData.livePayload.fuel]); - const updateData = (_CGTarget?: number, _SBPlan?: SimBrief) => { - CoherentCallSBEntryPax(cargo.current ?? 0, numPax.current ?? 0, _CGTarget ?? CGTarget, _SBPlan ?? SBPlan); + const updateData = (_CGTarget?: number, SBPlan?: SimBrief) => { + CoherentCallSBEntryPax(_CGTarget ?? CGTarget, SBPlan); }; return ( @@ -141,7 +133,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa type="text" placeholder="" className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" - value={SBPlan?.plannedZFW ?? WASMData.sbPlanned.ZFW} + value={WASMData.sbPlanned.ZFW} disabled /> @@ -151,7 +143,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa type="text" placeholder="" className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" - value={SBPlan?.plannedGW ?? WASMData.sbPlanned.GW} + value={WASMData.sbPlanned.GW} disabled /> diff --git a/PackageSources/js-bundle/src/utils/utils.ts b/PackageSources/js-bundle/src/utils/utils.ts index 17b8cdd..a373a4b 100644 --- a/PackageSources/js-bundle/src/utils/utils.ts +++ b/PackageSources/js-bundle/src/utils/utils.ts @@ -92,31 +92,30 @@ export const CoherentCallStationEntryF = ( ); }; -export const CoherentCallSBEntryPax = (cargo: number, numPax: number, CGTarget: number, SBPlan?: SimBrief) => { - Coherent.call( - COHERENT_COMM_BUS_WASM_CALL, - COMM_BUS_UPDATE_TARGET_EVENT, - JSON.stringify({ - mode: MODE_SB_SET, - cargo: cargo, - numPax: numPax, - CGTarget: CGTarget, - plannedZFW: SBPlan?.plannedZFW ?? 0, - plannedGW: SBPlan?.plannedGW ?? 0, - }) - ); +export const CoherentCallSBEntryPax = (CGTarget: number, SBPlan?: SimBrief) => { + const payload = { + mode: MODE_SB_SET, + cargo: SBPlan?.cargo, + numPax: SBPlan ? parseInt(SBPlan.pax as unknown as string) : undefined, + CGTarget: CGTarget, + plannedZFW: SBPlan?.plannedZFW, + plannedGW: SBPlan?.plannedGW, + }; + const string = JSON.stringify(payload); + + Coherent.call(COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, string); }; -export const CoherentCallSBEntryF = (cargo: number, CGTarget: number, SBPlan?: SimBrief) => { +export const CoherentCallSBEntryF = (CGTarget: number, SBPlan?: SimBrief) => { Coherent.call( COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, JSON.stringify({ mode: MODE_SB_SET, - cargo: cargo, + cargo: SBPlan?.cargo, CGTarget: CGTarget, - plannedZFW: SBPlan?.plannedZFW ?? 0, - plannedGW: SBPlan?.plannedGW ?? 0, + plannedZFW: SBPlan?.plannedZFW, + plannedGW: SBPlan?.plannedGW, }) ); }; diff --git a/PackageSources/wasm-module/load-manager.cpp b/PackageSources/wasm-module/load-manager.cpp index 9fbc0dd..50684d5 100644 --- a/PackageSources/wasm-module/load-manager.cpp +++ b/PackageSources/wasm-module/load-manager.cpp @@ -502,26 +502,36 @@ int receiveData(const char* buf) { switch(mode) { // SB Entry case 0: { - if (!document.HasMember("cargo") || !document.HasMember("CGTarget") || !document.HasMember("plannedZFW") || !document.HasMember("plannedGW")) return -1; - unsigned int cargo = document["cargo"].GetInt(); - double CGTarget = document["CGTarget"].GetDouble(); - if (UserData->isCargo) { - targetFPayloadData->CGTarget = CGTarget; - targetFPayloadData->sbPlanned.ZFW = document["plannedZFW"].GetDouble(); - targetFPayloadData->sbPlanned.GW = document["plannedGW"].GetDouble(); + if(document.HasMember("CGTarget")) + targetFPayloadData->CGTarget = document["CGTarget"].GetDouble(); + + if (document.HasMember("plannedZFW")) + targetFPayloadData->sbPlanned.ZFW = document["plannedZFW"].GetDouble(); + if (document.HasMember("plannedGW")) + targetFPayloadData->sbPlanned.GW = document["plannedGW"].GetDouble(); + + if (document.HasMember("cargo")) + targetFPayloadData->sbPlanned.cargo = document["cargo"].GetInt(); - distribute(targetFPayloadData, liveFuelData, cargo, UserData->isImperial, UserData->isER); + distribute(targetFPayloadData, liveFuelData, targetFPayloadData->sbPlanned.cargo, UserData->isImperial, UserData->isER); } else { - if (!document.HasMember("numPax")) return -1; - unsigned short numPax = document["numPax"].GetInt(); + if (document.HasMember("CGTarget")) + targetPaxPayloadData->CGTarget = document["CGTarget"].GetDouble(); - targetPaxPayloadData->CGTarget = CGTarget; - targetPaxPayloadData->sbPlanned.ZFW = document["plannedZFW"].GetDouble(); - targetPaxPayloadData->sbPlanned.GW = document["plannedGW"].GetDouble(); + if (document.HasMember("plannedZFW")) + targetPaxPayloadData->sbPlanned.ZFW = document["plannedZFW"].GetDouble(); + if (document.HasMember("plannedGW")) + targetPaxPayloadData->sbPlanned.GW = document["plannedGW"].GetDouble(); - distribute(targetPaxPayloadData, liveFuelData, numPax, cargo, UserData->isImperial, UserData->isER); + if (document.HasMember("numPax")) + targetPaxPayloadData->sbPlanned.pax = document["numPax"].GetInt(); + if (document.HasMember("cargo")) + targetPaxPayloadData->sbPlanned.cargo = document["cargo"].GetInt(); + + distribute(targetPaxPayloadData, liveFuelData, targetPaxPayloadData->sbPlanned.pax, targetPaxPayloadData->sbPlanned.cargo, UserData->isImperial, + UserData->isER); } break; } @@ -809,6 +819,10 @@ void sendData () { // SB Planned sbPlanned.AddMember("ZFW", UserData->isCargo ? targetFPayloadData->sbPlanned.ZFW: targetPaxPayloadData->sbPlanned.ZFW, allocator); sbPlanned.AddMember("GW", UserData->isCargo ? targetFPayloadData->sbPlanned.GW : targetPaxPayloadData->sbPlanned.GW, allocator); + sbPlanned.AddMember("cargo", UserData->isCargo ? targetFPayloadData->sbPlanned.cargo : targetPaxPayloadData->sbPlanned.cargo, allocator); + if (!UserData->isCargo) { + sbPlanned.AddMember("pax", targetPaxPayloadData->sbPlanned.pax, allocator); + } // Construct document document.AddMember("livePayload", livePayload.Move(), allocator); diff --git a/PackageSources/wasm-module/types.h b/PackageSources/wasm-module/types.h index bafb0c1..4184061 100644 --- a/PackageSources/wasm-module/types.h +++ b/PackageSources/wasm-module/types.h @@ -190,6 +190,8 @@ typedef struct { struct sbPlanned { double ZFW; double GW; + unsigned short pax; + unsigned int cargo; } sbPlanned; } paxPayloadData_t; typedef struct { @@ -250,6 +252,7 @@ typedef struct { struct sbPlanned { double ZFW; double GW; + unsigned int cargo; } sbPlanned; } fPayloadData_t; typedef struct {