Advertisement
joebodo

relay.lua

Apr 22nd, 2014
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.61 KB | None | 0 0
  1. vos.loadAPI('core.api')
  2.  
  3. local computers = { }
  4. local messageTypes = { }
  5.  
  6. Message.addHandler('relay', function(h, id, msg)
  7.   local relayMessage = msg.contents
  8.  
  9.   if relayMessage.toId then
  10.     Logger.debug('direct send to %d: %s', relayMessage.toId, relayMessage.type)
  11.     device.wireless_modem.transmit(relayMessage.toId, os.getComputerID(), relayMessage)
  12.   else
  13.     local listeners = messageTypes[relayMessage.type]
  14.     if listeners then
  15.       for k,computer in pairs(listeners) do
  16.         if id ~= computer.id then
  17.           Logger.debug('relaying from %d to %d: %s', id, computer.id, relayMessage.type)
  18.           device.wireless_modem.transmit(computer.id, os.getComputerID(), relayMessage)
  19.         end
  20.       end
  21.     end
  22.   end
  23. end)
  24.  
  25. local function getComputer(id)
  26.   local computer = computers[id]
  27.   if not computer then
  28.     computer = {
  29.       lastMessage = os.clock(),
  30.       id = id
  31.     }
  32.     computers[id] = computer
  33.     Logger.debug('relaying for %d', id)
  34.   end
  35.   return computer
  36. end
  37.  
  38. Message.addHandler("listen", function(h, id, msg)
  39.   local types = msg.contents
  40.   for _,v in pairs(types) do
  41.     local listener = messageTypes[v]
  42.     if not listener then
  43.       listener = { }
  44.       messageTypes[v] = listener
  45.     end
  46.     for _,v in pairs(listener) do
  47.       if v.id == id then
  48.         return
  49.       end
  50.     end
  51.     table.insert(listener, getComputer(id))
  52.   end
  53. end)
  54.  
  55. Message.addHandler("getRelayStation", function(h, id, msg)
  56.   getComputer(id)
  57.   Message.send(id, "relayStation", os.getComputerID())
  58. end)
  59.  
  60. Logger.filter('event', 'modem_receive', 'modem_send')
  61.  
  62. Event.pullEvents()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement