chore: misc changes and refactor
This commit is contained in:
@@ -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() }
|
||||||
|
|
||||||
|
local eventName = eventData[1]
|
||||||
|
table.remove(eventData, 1)
|
||||||
|
|
||||||
|
dispatchEvents(eventName, table.unpack(eventData))
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
|
main loop
|
||||||
|
]]
|
||||||
while true do
|
while true do
|
||||||
pollAndProcessMessages()
|
pollEvents()
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user