diff --git a/controller-client/main.lua b/controller-client/main.lua index e3d4f72..b96eaf6 100644 --- a/controller-client/main.lua +++ b/controller-client/main.lua @@ -1,3 +1,22 @@ +local lastMessage = 0 + function love.draw2() - love.graphics.setBackgroundColor(0, 1, 0) + love.graphics.setBackgroundColor(0, 0, 0) + + local time + if lastMessage == 0 then + time = "Never" + else + time = love.timer.getTime() - time "s ago" + end + love.graphics.print("Last message received: " .. time, 5, 5) +end + +function love.load() + love.graphics.setFont(love.graphics.newFont(15)) + love.window.setFullscreen(true) +end + +function love.gamepadpressed(joystick, button) + print("Pressed gamepad button " .. button .. " on joystick " .. joystick:getName()) end diff --git a/controller-host/conf.lua b/controller-host/conf.lua index 0db333d..75ef255 100644 --- a/controller-host/conf.lua +++ b/controller-host/conf.lua @@ -2,4 +2,5 @@ function love.conf(t) t.version = "11.4" t.window.title = "Spider Controller" t.window.resizable = true + t.window.fullscreen = true end diff --git a/controller-host/main.lua b/controller-host/main.lua index 470dc5c..3546e91 100644 --- a/controller-host/main.lua +++ b/controller-host/main.lua @@ -19,9 +19,16 @@ function printTable(table, indentation) end end +function safeCall(target, ...) + local success, msg = pcall(target, ...) + if not success then + errorMessage = msg + end +end + function love.draw(...) - if love.draw2 then - love.draw2(...) + if love.draw2 and not errorMessage then + safeCall(love.draw2, ...) else local text = "Awaiting payload..." local font = love.graphics.getFont() @@ -58,11 +65,11 @@ end function love.update(...) local message = mqttEventChannel:pop() if message then - love.mqtt[message.target](unpack(message.args)) + safeCall(love.mqtt[message.target], unpack(message.args)) end - if love.update2 then - love.update2(...) + if love.update2 and not errorMessage then + safeCall(love.update2, ...) end end @@ -78,6 +85,7 @@ end function love.mqtt.message2(topic, payload) if topic == "controller/payload" then + errorMessage = nil local success = love.filesystem.unmount("client.zip") if not success then print("Could not unmount client.zip") @@ -98,7 +106,7 @@ function love.mqtt.message2(topic, payload) love.load = nil chunk() if love.load then - love.load() + safeCall(love.load) end elseif love.mqtt.message then love.mqtt.message(topic, payload) diff --git a/sim.lua b/sim.lua new file mode 100644 index 0000000..25dd694 --- /dev/null +++ b/sim.lua @@ -0,0 +1,54 @@ +package.path = package.path .. ';./controller-host/?/init.lua;./controller-host/?.lua' +local mqtt = require("mqtt") +local client + +local file = ... +local fh = io.open(file, "rb") +local contents = fh:read("a") +fh:close() + +function printTable(table, indentation) + indentation = indentation or "" + for name, value in pairs(table) do + print(indentation .. tostring(name) .. ": " .. tostring(value)) + end +end + +local function onMessage(data) + print(data.payload) +end + +local function onConnect(connack) + if connack.rc ~= 0 then + print("Connection to broker failed:", connack:reason_string()) + os.exit(1) + end + print("Connected to MQTT") + + assert(client:subscribe{ + topic = "spider/controller/stdout" + }) + + io.write("Sending payload...") + assert(client:publish { + topic = "spider/controller/payload", + payload = contents, + qos = 0 + }) + print(" DONE!") +end + +client = mqtt.client { + uri = "mqtt.seeseepuff.be", + username = "mqtt_controller", + clean = true, + reconnect = 5, +} + +client:on { + connect = onConnect, + message = onMessage, +} + +print("Connecting") +mqtt.run_ioloop(client)