chore: misc changes and refactor

This commit is contained in:
2025-05-08 20:31:42 -03:00
parent 7ca69cf0a0
commit e22242c4e7
+43 -14
View File
@@ -103,7 +103,7 @@ function handleScan(keys)
log.info("received scan, host channel assigned to %d, replying...", keys.hostChannel) log.info("received scan, host channel assigned to %d, replying...", keys.hostChannel)
local x, y, z = gps.locate() local x, y, z = gps.locate()
sendToHost("SCAN", { sendToHost("SCAN", {
["positionX"] = x, ["positionX"] = x,
["positionY"] = y, ["positionY"] = y,
@@ -162,27 +162,38 @@ end
declareCommandHandler("ABORT", handleAbort) declareCommandHandler("ABORT", handleAbort)
--[[ --[[
main event handling
]] ]]
function pollAndProcessMessages() local eventListeners = {}
local eventType, side, channel, replyChannel, message, dist = os.pullEvent("modem_message") local function registerEventListener(name, listener)
if not eventListeners[name] then eventListeners[name] = {} end
table.insert(eventListeners[name], listener)
end
-- ignore messages not from host, HOST_CHANNEL and REPLY_CHANNEL will get assigned after receiving SCAN on channel 0 local function dispatchEvents(event, ...)
local eventTbl = eventListeners[event]
if not eventTbl then return end
for i = 1, #eventTbl, 1 do
eventTbl[i](...)
end
end
local function handleMessages(side, channel, replyChannel, message, dist)
if TURTLE_CHANNEL and channel ~= TURTLE_CHANNEL then return end if TURTLE_CHANNEL and channel ~= TURTLE_CHANNEL then return end
-- message validation -- msg validation
if type(message) ~= "table" then return end if type(message) ~= "table" then return end
if not message.header or message.header ~= MSG_HEADER then return end if not message.header or message.header ~= MSG_HEADER then return end
if not message.data then message.data = {} end if not message.data then message.data = {} end
-- command validation -- cmd validation
if not message.name then if not message.name then
log.warning("received nameless message") log.warning("received nameless command?")
return return
end end
if not commands[message.name] then if not commands[message.name] then
log.error("unhandled message (%s)", message.name) log.error("unhandled command (%s)", message.name)
return return
end end
@@ -194,14 +205,32 @@ function pollAndProcessMessages()
end end
end end
cmd.handler(message.data) -- cmd execution
local success, err = pcall(cmd.handler, message.data, message.id)
if not success then
log.error("error occurred while executing command %s: %s", message.name, err)
return
end
-- message handling
log.info("processed command (%s)", message.name) log.info("processed command (%s)", message.name)
end end
registerEventListener("modem_message", handleMessages)
log.general("tutel client init") --[[
event polling
]]
function pollEvents()
local eventData = { os.pullEvent() }
while true do local eventName = eventData[1]
pollAndProcessMessages() table.remove(eventData, 1)
dispatchEvents(eventName, table.unpack(eventData))
end end
--[[
main loop
]]
while true do
pollEvents()
end