diff --git a/inventoryWebBridge.lua b/inventoryWebBridge.lua index 7d77dd9..ee39975 100644 --- a/inventoryWebBridge.lua +++ b/inventoryWebBridge.lua @@ -14,8 +14,9 @@ local POLL_INTERVAL = 0.5 -- seconds between command polls local STATE_INTERVAL = 1 -- seconds between state forwards -- Modem channels (must match inventoryManager.lua) -local BROADCAST_CHANNEL = 4200 -local ORDER_CHANNEL = 4201 +local BROADCAST_CHANNEL = 4200 +local ORDER_CHANNEL = 4201 +local BRIDGE_REPLY_CHANNEL = 4206 -- dedicated reply channel for bridge ------------------------------------------------- -- Load config from file if present @@ -72,6 +73,7 @@ local function findModem() modem = peripheral.wrap(name) modemName = name modem.open(BROADCAST_CHANNEL) + modem.open(BRIDGE_REPLY_CHANNEL) return true end end @@ -144,7 +146,7 @@ local function processCommand(cmd) print(string.format("[CMD] %s", action)) if action == "order" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "order", commandId = cmd.commandId, itemName = cmd.itemName, @@ -152,45 +154,81 @@ local function processCommand(cmd) dropperName = cmd.dropperName, }) elseif action == "scan" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "scan", commandId = cmd.commandId, }) elseif action == "toggle_pause" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "toggle_pause", commandId = cmd.commandId, }) elseif action == "toggle_recipe" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "toggle_recipe", commandId = cmd.commandId, recipe = cmd.recipe, }) elseif action == "enable_all" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "enable_all", commandId = cmd.commandId, }) elseif action == "disable_all" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "disable_all", commandId = cmd.commandId, }) elseif action == "sort_barrel" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "sort_barrel", commandId = cmd.commandId, barrelName = cmd.barrelName, }) elseif action == "craft" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "craft", commandId = cmd.commandId, recipeIdx = cmd.recipeIdx, }) + elseif action == "recursive_craft" then + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { + type = "recursive_craft", + commandId = cmd.commandId, + itemName = cmd.itemName, + count = cmd.count, + }) + elseif action == "learn_crafting_recipe" then + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { + type = "learn_crafting_recipe", + commandId = cmd.commandId, + output = cmd.output, + count = cmd.count, + grid = cmd.grid, + }) + elseif action == "learn_smelting_recipe" then + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { + type = "learn_smelting_recipe", + commandId = cmd.commandId, + input = cmd.input, + result = cmd.result, + furnaces = cmd.furnaces, + }) + elseif action == "forget_recipe" then + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { + type = "forget_recipe", + commandId = cmd.commandId, + recipe = cmd.recipe, + }) + elseif action == "sync_disabled_recipes" then + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { + type = "sync_disabled_recipes", + commandId = cmd.commandId, + disabledRecipes = cmd.disabledRecipes, + smeltingPaused = cmd.smeltingPaused, + }) elseif action == "reboot" then - modem.transmit(ORDER_CHANNEL, BROADCAST_CHANNEL, { + modem.transmit(ORDER_CHANNEL, BRIDGE_REPLY_CHANNEL, { type = "reboot", commandId = cmd.commandId, target = cmd.target or "all", @@ -212,6 +250,19 @@ local function modemListener() if message.type == "state" then latestState = message end + elseif channel == BRIDGE_REPLY_CHANNEL and type(message) == "table" then + -- Forward command results back to web server + local resultType = message.type + if resultType == "order_result" or resultType == "craft_result" + or resultType == "recursive_craft_result" or resultType == "find_item_result" then + pcall(httpPost, "/api/bridge/result", { + action = resultType, + commandId = message.commandId, + success = message.success, + message = message.message, + error = message.error, + }) + end end end end