88 lines
2.0 KiB
Lua
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 |