ldd-CC/disknet2.lua

119 lines
2.5 KiB
Lua

--[[
disknet2
Work in progress (nonfunctional)
--]]
local disknet = {
config = {
limitChannelsToModem = false,
updateSpeed = 0.05,
messageDeleteAge = 5,
path = "disk/DISKNET",
openChannels = {},
},
}
-- checks if an inputted channel is valid to use
local checkValidChannel = function(channel)
if disknet.config.limitChannelsToModem then
if type(channel) == "number" then
if channel >= 1 and <= 65535 then
return true, "all good"
else
return false, "channel is out of modem range (1-65535)"
end
else
return false, "channel is out of modem range (must be number)"
end
else
if type(channel) == "number" or type(channel) == "string" then
if #channel <= 32 then
return true, "all nice"
else
return false, "channel is too large"
end
else
return false, "channel must be string or number"
end
end
end
local makeRandomID = function()
return math.random(1, 2^31-1)
end
local readFile = function(path)
local file = fs.open(path, "r")
local contents = file.readAll()
file.close()
return contents
end
local writeFile = function(path, contents)
local file = fs.open(path, "w")
file.write(contents)
file.close()
end
-- minified version of textutils.serialize
-- will actually make later
local serialize = function(input)
return textutils.serialize(input)
end
disknet.setPath = function(path)
local p = fs.combine("", path)
if fs.isReadOnly(p) then
return false, "Cannot set to read-only path."
elseif (fs.exists(path) and not fs.isDir(path)) then
return false, "Cannot set path to that of a file."
else
disknet.config.path = p
return true
end
end
local channelInfo = {}
disknet.open = function(channel)
assert(checkValidChannel(channel))
disknet.config.openChannels[channel] = true
channelInfo[channel] = {}
end
disknet.close = function(channel)
disknet.config.openChannels[channel] = nil
channelInfo[channel] = nil
end
disknet.closeAll = function()
disknet.config.openChannels = {}
channelInfo = {}
end
disknet.send = function(message, channel, recipientID)
local sMessage = serialize(message)
assert(sMessage, "invalid message")
assert(checkValidChannel(channel))
assert(disknet.config.openChannels[channel], "cannot send to unopened channel")
local mID = makeRandomID()
-- sanitize all inputs
if type(recipientID) == "string" then
recipientID = recipientID:gsub("\n", "\\n")
end
local output = table.concat({
recipientID or "",
"",
"",
"",
serialize(message)
}, "\n")
end
disknet.receive = function(filterChannel, filterID)
end