You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

local network = require("network")
local component = require("component")
local event = {}
local addr_num = 0
local last_msg = nil
function event.listen(event, callback)
if event ~= "modem_message" then
error("Event '"..event"' is not supported!")
end
addr = "A"..addr_num
addr_num = addr_num + 1
function ev_callback(ev, addr1, addr2, port, dist, msg)
last_msg = {
ev=ev,
addr1=addr1,
addr2=addr2,
port=port,
dist=dist,
msg=msg,
}
-- Inject local address so the check passes
component.modem.address = addr1
callback(ev, addr1, addr2, port, dist, msg)
end
network.register(addr, ev_callback)
end
function event.ignore(event, callback)
if event ~= "modem_message" then
error("Event '"..event"' is not supported!")
end
network.deregister(network.get_scene())
end
function event.pull(event)
-- Just return the last message and hope it is the
-- right one ...
if last_msg == nil then
return nil
end
local lmsg = last_msg
last_msg = nil
return lmsg.ev, lmsg.addr1, lmsg.addr2, lmsg.port, lmsg.dist, lmsg.msg
end
function event.pullFiltered(timeout, filter)
if last_msg == nil then
return nil
end
local lmsg = last_msg
last_msg = nil
if filter(lmsg.ev, lmsg.addr1, lmsg.addr2, lmsg.port, lmsg.dist, lmsg.msg) then
return lmsg.ev, lmsg.addr1, lmsg.addr2, lmsg.port, lmsg.dist, lmsg.msg
else
return nil
end
end
return event