Files
computer_system/core.lua
2025-05-06 13:43:36 +02:00

88 lines
2.0 KiB
Lua

-- Websocker: Used for connection between the controle webserver and Units(computers)
Core = {};
Core.__index = Core;
function Core:new()
local self = setmetatable({}, Core);
return self;
end
function Core:connect()
ws, err = assert(http.websocket("ws://localhost:8080"));
if not ws then
term.setTextColor(colors.red);
print(err);
term.setTextColor(colors.white);
end
self.ws = ws;
end
function Core:send(package)
if not package then
return false, "Missing package";
end
if not self.ws then
return false, "Websocket not initiated";
end
self.ws:send(textutils.serialiseJSON(package));
end
function Core:read()
if not self.ws then
return false, "Websocket not initiated";
end
return true, textutils.unserialiseJSON(self.ws:read())
end
function Core:download(file)
if not self.ws then
return false, "Websocket not initiated";
end
self:send({type = "REQUEST_FILE_INFO", file = file});
local success, data = self:read();
if not success then
return false, "Failed to read: "+data;
end
if not data.type then
return false, "Invalid package: "+textutils.serialiseJSON(data);
end
if not (data.type == "FILE_INFO") then
return false, "Invalid package type: "+textutils.serialiseJSON(data);
end
if not data.exists then
return false, "File is missing from server"
end
self:send({type = "REQUEST_FILE_DATA", file = file})
local success, data = self:read();
if not success then
return false, "Failed to read: "+data;
end
if not data.type then
return false, "Invalid package: "+textutils.serialiseJSON(data);
end
if not data.type == "FILE_DATA" then
return false, "Invalid type: "+textutils.serialiseJSON(data)
end
local fileStream = io.open(file, "w");
fileStream:write(data.fileContent);
fileStream:close();
return true, "Success"
end