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
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
|