Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vos.loadAPI('core.api')
- local computers = { }
- local messageTypes = { }
- Message.addHandler('relay', function(h, id, msg)
- local relayMessage = msg.contents
- if relayMessage.toId then
- Logger.debug('direct send to %d: %s', relayMessage.toId, relayMessage.type)
- device.wireless_modem.transmit(relayMessage.toId, os.getComputerID(), relayMessage)
- else
- local listeners = messageTypes[relayMessage.type]
- if listeners then
- for k,computer in pairs(listeners) do
- if id ~= computer.id then
- Logger.debug('relaying from %d to %d: %s', id, computer.id, relayMessage.type)
- device.wireless_modem.transmit(computer.id, os.getComputerID(), relayMessage)
- end
- end
- end
- end
- end)
- local function getComputer(id)
- local computer = computers[id]
- if not computer then
- computer = {
- lastMessage = os.clock(),
- id = id
- }
- computers[id] = computer
- Logger.debug('relaying for %d', id)
- end
- return computer
- end
- Message.addHandler("listen", function(h, id, msg)
- local types = msg.contents
- for _,v in pairs(types) do
- local listener = messageTypes[v]
- if not listener then
- listener = { }
- messageTypes[v] = listener
- end
- for _,v in pairs(listener) do
- if v.id == id then
- return
- end
- end
- table.insert(listener, getComputer(id))
- end
- end)
- Message.addHandler("getRelayStation", function(h, id, msg)
- getComputer(id)
- Message.send(id, "relayStation", os.getComputerID())
- end)
- Logger.filter('event', 'modem_receive', 'modem_send')
- Event.pullEvents()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement