53 lines
2.0 KiB
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) |