fix: Refactor command polling and dashboard refresh logic in main loop
This commit is contained in:
@@ -282,12 +282,46 @@ end
|
|||||||
|
|
||||||
addLog("Listening on channels " .. STATUS_CHANNEL .. " and " .. CHANNEL_RECEIVE, colors.lightBlue)
|
addLog("Listening on channels " .. STATUS_CHANNEL .. " and " .. CHANNEL_RECEIVE, colors.lightBlue)
|
||||||
|
|
||||||
|
-- Start polling timer
|
||||||
|
local POLL_INTERVAL = 1 -- Poll every 1 second
|
||||||
|
os.startTimer(POLL_INTERVAL)
|
||||||
|
|
||||||
-- Main loop
|
-- Main loop
|
||||||
local lastRefresh = os.epoch("utc")
|
local lastRefresh = os.epoch("utc")
|
||||||
while true do
|
while true do
|
||||||
local event, side, channel, replyChannel, message, distance = os.pullEvent()
|
local event, side, channel, replyChannel, message, distance = os.pullEvent()
|
||||||
|
|
||||||
if event == "modem_message" then
|
if event == "timer" then
|
||||||
|
-- Poll for commands for all known turtles
|
||||||
|
for turtleID, turtleData in pairs(turtles) do
|
||||||
|
local commands = pollCommands(turtleID)
|
||||||
|
|
||||||
|
-- Forward commands back to turtle
|
||||||
|
for _, cmd in ipairs(commands) do
|
||||||
|
stats.commandsSent = stats.commandsSent + 1
|
||||||
|
addLog("CMD: " .. cmd.command .. " -> Turtle #" .. turtleID, colors.yellow)
|
||||||
|
|
||||||
|
modem.transmit(COMMAND_CHANNEL, CHANNEL_RECEIVE, {
|
||||||
|
command = cmd.command,
|
||||||
|
param = cmd.param,
|
||||||
|
target = turtleID
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Restart timer
|
||||||
|
os.startTimer(POLL_INTERVAL)
|
||||||
|
|
||||||
|
-- Refresh display if we have a monitor
|
||||||
|
if hasMonitor then
|
||||||
|
local now = os.epoch("utc")
|
||||||
|
if now - lastRefresh > 2000 then
|
||||||
|
drawDashboard()
|
||||||
|
lastRefresh = now
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif event == "modem_message" then
|
||||||
-- Only process messages on our channels
|
-- Only process messages on our channels
|
||||||
if channel == STATUS_CHANNEL or channel == CHANNEL_RECEIVE then
|
if channel == STATUS_CHANNEL or channel == CHANNEL_RECEIVE then
|
||||||
stats.messagesReceived = stats.messagesReceived + 1
|
stats.messagesReceived = stats.messagesReceived + 1
|
||||||
@@ -307,21 +341,6 @@ while true do
|
|||||||
if success then
|
if success then
|
||||||
stats.serverUpdates = stats.serverUpdates + 1
|
stats.serverUpdates = stats.serverUpdates + 1
|
||||||
addLog(" -> Forwarded to server", colors.lime)
|
addLog(" -> Forwarded to server", colors.lime)
|
||||||
|
|
||||||
-- Check for commands from server
|
|
||||||
local commands = pollCommands(turtleID)
|
|
||||||
|
|
||||||
-- Forward commands back to turtle
|
|
||||||
for _, cmd in ipairs(commands) do
|
|
||||||
stats.commandsSent = stats.commandsSent + 1
|
|
||||||
addLog(" -> CMD: " .. cmd.command .. " to Turtle #" .. turtleID, colors.yellow)
|
|
||||||
|
|
||||||
modem.transmit(COMMAND_CHANNEL, CHANNEL_RECEIVE, {
|
|
||||||
command = cmd.command,
|
|
||||||
param = cmd.param,
|
|
||||||
target = turtleID
|
|
||||||
})
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
stats.errors = stats.errors + 1
|
stats.errors = stats.errors + 1
|
||||||
addLog(" -> Server error", colors.red)
|
addLog(" -> Server error", colors.red)
|
||||||
@@ -330,13 +349,4 @@ while true do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Refresh display every 2 seconds if we have a monitor
|
|
||||||
if hasMonitor then
|
|
||||||
local now = os.epoch("utc")
|
|
||||||
if now - lastRefresh > 2000 then
|
|
||||||
drawDashboard()
|
|
||||||
lastRefresh = now
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user