96 lines
2.6 KiB
Lua
96 lines
2.6 KiB
Lua
-- Inventory Manager - Opus autorun script
|
|
-- Detects configured role and launches the appropriate program at boot
|
|
|
|
local fs = _G.fs
|
|
local kernel = _G.kernel
|
|
local os = _G.os
|
|
local peripheral = _G.peripheral
|
|
local shell = _ENV.shell
|
|
|
|
local BASE = 'packages/inventory-manager'
|
|
local CFG = 'usr/config/inventory-manager'
|
|
|
|
-------------------------------------------------
|
|
-- Determine role from config files written during install
|
|
-------------------------------------------------
|
|
|
|
local function cfgExists(name)
|
|
return fs.exists(fs.combine(CFG, name))
|
|
or fs.exists(fs.combine(BASE, name))
|
|
end
|
|
|
|
local role
|
|
if cfgExists('.manager_config') then
|
|
role = 'manager'
|
|
elseif cfgExists('.client_config') then
|
|
role = 'client'
|
|
elseif cfgExists('.webbridge_config') then
|
|
role = 'bridge'
|
|
elseif cfgExists('.miner_config') then
|
|
role = 'miner'
|
|
elseif cfgExists('.billboard_config') then
|
|
role = 'billboard'
|
|
elseif _G.turtle then
|
|
role = 'turtle'
|
|
end
|
|
|
|
if not role then return end
|
|
|
|
-------------------------------------------------
|
|
-- Register reboot listener as a kernel hook
|
|
-- Allows remote reboot via modem (channel 4205)
|
|
-------------------------------------------------
|
|
|
|
local SYSTEM_CHANNEL = 4205
|
|
|
|
local modem = peripheral.find('modem')
|
|
if modem then
|
|
modem.open(SYSTEM_CHANNEL)
|
|
|
|
kernel.hook('modem_message', function(_, data)
|
|
-- data = { side, channel, replyChannel, message, distance }
|
|
if data[2] == SYSTEM_CHANNEL
|
|
and type(data[4]) == 'table'
|
|
and data[4].type == 'reboot'
|
|
then
|
|
local target = data[4].target or 'all'
|
|
if target == 'all'
|
|
or target == role
|
|
or target == tostring(os.getComputerID())
|
|
then
|
|
os.reboot()
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- Launch the program for this role
|
|
-------------------------------------------------
|
|
|
|
local programs = {
|
|
manager = 'inventoryManager.lua',
|
|
client = 'inventoryClient.lua',
|
|
bridge = 'inventoryWebBridge.lua',
|
|
turtle = 'craftingTurtle.lua',
|
|
miner = 'miningTurtle.lua',
|
|
billboard = 'monitorBillboard.lua',
|
|
}
|
|
|
|
local program = fs.combine(BASE, programs[role])
|
|
|
|
if shell.openForegroundTab then
|
|
shell.openForegroundTab(program)
|
|
|
|
-- Client role also runs the dropper controller
|
|
if role == 'client' then
|
|
local dropper = fs.combine(BASE, 'dropperController.lua')
|
|
if fs.exists(dropper) then
|
|
shell.openTab(dropper)
|
|
end
|
|
end
|
|
else
|
|
-- No multishell — run directly (blocks boot)
|
|
shell.run(program)
|
|
end
|