From 2bcb907914945e37fe6bb6cace20a1fb4ffdbb18 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 22 Mar 2026 01:40:04 -0400 Subject: [PATCH] Enhance state management: implement version tracking and conditional broadcasting for configuration updates --- inventoryManager.lua | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/inventoryManager.lua b/inventoryManager.lua index 7c2cd61..6577812 100644 --- a/inventoryManager.lua +++ b/inventoryManager.lua @@ -681,6 +681,18 @@ local LOW_STOCK_ALERTS = { -- Active alerts (populated by checkAlerts) local activeAlerts = {} +------------------------------------------------- +-- State version tracking (for delta broadcasting) +------------------------------------------------- + +local stateVersion = 0 +local lastBroadcastVersion = -1 +local configDirty = true + +local function bumpStateVersion() + stateVersion = stateVersion + 1 +end + ------------------------------------------------- -- Cached data (updated by background scanner) ------------------------------------------------- @@ -769,6 +781,9 @@ local function adjustCache(itemName, chestName, delta) -- 3) Update grandTotal incrementally cache.grandTotal = cache.grandTotal + delta + + -- 4) Bump state version for delta broadcasting + bumpStateVersion() end --- Rebuild itemList from catalogue if dirty (lazy rebuild) @@ -3065,9 +3080,11 @@ end -- Network broadcast (sends state to client displays) ------------------------------------------------- -local function broadcastState() +local function broadcastState(force) if not networkModem then return end ensureItemList() + + -- Build dynamic state (always included) local state = { type = "state", cache = { @@ -3088,11 +3105,18 @@ local function broadcastState() alerts = activeAlerts, smeltingPaused = smeltingPaused, disabledRecipes = disabledRecipes, - smeltable = SMELTABLE, - craftable = CRAFTABLE, craftTurtleOk = craftTurtleName and peripheral.isPresent(craftTurtleName), } + + -- Include static config only when dirty (startup, scan, recipe toggles) + if configDirty then + state.smeltable = SMELTABLE + state.craftable = CRAFTABLE + configDirty = false + end + networkModem.transmit(BROADCAST_CHANNEL, ORDER_CHANNEL, state) + lastBroadcastVersion = stateVersion end -------------------------------------------------