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