diff --git a/inventoryManager.lua b/inventoryManager.lua index 6bdfc57..b87c6ed 100644 --- a/inventoryManager.lua +++ b/inventoryManager.lua @@ -28,6 +28,9 @@ local BROADCAST_INTERVAL = 1 -- seconds between state broadcasts local CRAFT_CHANNEL = 4203 local CRAFT_REPLY_CHANNEL = 4204 +-- Remote reboot system channel (all devices listen on this) +local SYSTEM_CHANNEL = 4205 + ------------------------------------------------- -- Idempotent command tracking ------------------------------------------------- @@ -2571,6 +2574,7 @@ local function main() networkModemName = name networkModem.open(ORDER_CHANNEL) networkModem.open(CRAFT_REPLY_CHANNEL) + networkModem.open(SYSTEM_CHANNEL) break end end @@ -2967,6 +2971,20 @@ local function main() cache.droppers = merged bumpStateVersion() pcall(broadcastState) + elseif message.type == "reboot" then + local target = message.target or "all" + log.info("NET", "Reboot command received, target: %s", target) + -- Broadcast reboot to all clients on system channel + networkModem.transmit(SYSTEM_CHANNEL, ORDER_CHANNEL, { + type = "reboot", + target = target, + }) + -- If manager itself is targeted, reboot after a short delay + if target == "all" or target == "manager" then + log.info("NET", "Manager rebooting in 1s...") + sleep(1) + os.reboot() + end elseif message.type == "craft" and message.recipeIdx then log.info("NET", "Craft request: recipe #%d", message.recipeIdx) local pok, ok, err = pcall(craftItem, message.recipeIdx)