From 990e1a73e13b0ef72fe5f656865d4d416bb947e2 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Wed, 1 Apr 2020 21:35:20 +0100 Subject: [PATCH] lampulator: tidy and add easy way to get last message Now, left-clicking on the window will push the last received line (which includes the MQTT topic) to the system clipboard. --- linux-draw-love/draw.lua | 4 +-- linux-draw-love/main.lua | 60 +++++++++++++++++++--------------------- linux-draw-love/net.lua | 2 +- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/linux-draw-love/draw.lua b/linux-draw-love/draw.lua index 431a914..8cee2dc 100644 --- a/linux-draw-love/draw.lua +++ b/linux-draw-love/draw.lua @@ -4,7 +4,7 @@ ltmr = require "love.timer" lthr = require "love.thread" imgd = limg.newImageData(8,4) -netchan = lthr.getChannel ( "netc" ) +drawchan = lthr.getChannel ( "drawc" ) framechan = lthr.getChannel ( "framec" ) -- emulate enough framebuffer functionality, backed by a Lua array <<< @@ -174,7 +174,7 @@ end -- >>> while true do - local line = netchan:demand(snooze) + local line = drawchan:demand(snooze) if line then local from, cmd = line:match("^(%S+)%s+(.*)$") diff --git a/linux-draw-love/main.lua b/linux-draw-love/main.lua index 580ced9..f49c768 100644 --- a/linux-draw-love/main.lua +++ b/linux-draw-love/main.lua @@ -1,54 +1,50 @@ function love.threaderror(thread, errorstr) print("Thread error!", thread, errorstr) - love.event.push('quit') + love.event.quit(1) end function love.load() love.window.setTitle("lampulator") love.window.setMode(32, 16, { display = 1, x = 0, y = 0 }) - framechan = love.thread.getChannel ( "framec" ); - netchan = love.thread.getChannel ( "netc" ); + drawchan = love.thread.getChannel ("drawc" ) -- main -> draw + framechan = love.thread.getChannel ("framec") -- draw -> main + netchan = love.thread.getChannel ("netc" ) -- net -> main - netthread = love.thread.newThread ( "net.lua" ); + netthread = love.thread.newThread ("net.lua") netthread:start() - drawthread = love.thread.newThread ( "draw.lua" ); + drawthread = love.thread.newThread ("draw.lua") drawthread:start() end --- Override the event loop -function love.run() - if love.load then love.load(love.arg.parseGameArguments(arg), arg) end - if love.timer then love.timer.step() end - - return function() - local dt = 0 - - if love.event then - local name, a,b,c,d,e,f - love.event.pump() - for name, a,b,c,d,e,f in love.event.poll() do - if name == "quit" then - if not love.quit or not love.quit() then - return a or 0 - end - end - love.handlers[name](a,b,c,d,e,f) - end - end +love.timer = nil -- don't tick, we do that ourselves in update + +local lastnetline + +function love.mousepressed(x, y, btn, ist, presses) + if btn == 1 and lastnetline then + love.system.setClipboardText(lastnetline) + end +end - -- XXX We have to poll the threads periodically to catch errors - local imgd = framechan:demand(1) - if imgd then +function love.update() + -- Poor man's fanout + local line = netchan:pop() + if line then + lastnetline = line + drawchan:push(line) + end + + -- We have to let the event loop run every so often, even if there + -- aren't frames coming our way. + local imgd = framechan:demand(1) + if imgd then + love.draw = function() local img = love.graphics.newImage(imgd) img:setFilter('nearest') love.graphics.clear(love.graphics.getBackgroundColor()) love.graphics.draw(img, 0, 0, 0, 4, 4) end - love.graphics.present() - - if love.timer then dt = love.timer.step() end - end end diff --git a/linux-draw-love/net.lua b/linux-draw-love/net.lua index cbe674d..9057bb6 100644 --- a/linux-draw-love/net.lua +++ b/linux-draw-love/net.lua @@ -7,4 +7,4 @@ netchan = lthr.getChannel ( "netc" ) for line in io.lines() do netchan:push(line) end -lev.push("quit") +lev.quit(0) -- 2.50.1