Files
Craftoria-ComputerCraft/automate_farming/database_main.lua

53 lines
2.0 KiB
Lua

local json = require "json"
local databaseStorage = peripheral.find("drive") or error("No drive attached", 0)
if (databaseStorage.isDiskPresent() == false or databaseStorage.getDiskLabel() ~= "Farming Data") then error("Missing or wrong drive", 0) end
local databaseModem = peripheral.find("modem") or error("No modem attached", 0)
local fieldDataChannel = 420 -- Request Field Data Channel
local setupFieldChannel = 421 -- Setup Field Channel
if (databaseModem.isOpen(fieldDataChannel) or databaseModem.isOpen(setupFieldChannel)) then databaseModem.closeAll() end
databaseModem.open(fieldDataChannel)
databaseModem.open(setupFieldChannel)
local function listenForFieldDataRequests()
while true do
local event, _, incomingChannel, replyChannel, message, _ = os.pullEvent("modem_message")
if (incomingChannel == fieldDataChannel) then
local databaseFile = fs.open("/" .. databaseStorage.getMountPath() .. "/field_data.txt", "r")
local database = json.decode(databaseFile.readAll())
databaseFile.close()
end
end
end
local function listenForFieldSetups()
while true do
local event, _, incomingChannel, replyChannel, message, _ = os.pullEvent("modem_message")
if (incomingChannel == setupFieldChannel) then
local databaseFile = fs.open("/" .. databaseStorage.getMountPath() .. "/field_data.txt", "w")
local database = json.decode(databaseFile.readAll())
databaseFile.write(json.encode(database))
databaseFile.close()
end
end
end
local function listenForDiskEject()
repeat
local _, side = os.pullEvent("disk_eject")
until side ~= nil
error("Disk was ejected!")
end
local function listenForPeripheralDetach()
repeat
local _, side = os.pullEvent("peripheral_detach")
until side ~= nil
error("Modem was removed!")
end
parallel.waitForAny(listenForFieldDataRequests, listenForFieldSetups, listenForDiskEject, listenForPeripheralDetach)