Kingdaro

NetGroup

Mar 15th, 2013
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.21 KB | None | 0 0
  1. function wrap(side, filter)
  2.     local obj = {}
  3.     local members = {}
  4. --  local filter = filter
  5.    
  6.     function obj:__index(index)
  7.         return function(...)
  8.             assert(filter, 'No peripheral filter set! Use group.filter')
  9.             local returns = {}
  10.            
  11.             for i, periph in pairs(members) do
  12.                 if peripheral.getType(i) == filter then
  13.                     local value = periph[index]
  14.                     assert(value, filter..'.'..index..' does not exist')
  15.                    
  16.                     local args = {...}
  17.                     if type(args[1]) == 'function' then
  18.                         local res = {args[1](periph, i)}
  19.                         args = #res > 0 and res or nil
  20.                     end
  21.                    
  22.                     if args then
  23.                         if type(value) == 'function' then
  24.                             local res = {value(unpack(args))}
  25.                             if res then
  26.                                 returns[i] = res
  27.                             end
  28.                         else
  29.                             returns[i] = value
  30.                         end
  31.                     end
  32.                 end
  33.             end
  34.            
  35.             return setmetatable(returns, returns)
  36.         end
  37.     end
  38.    
  39.     function obj.filter(new_filter)
  40.         filter = new_filter or filter
  41.         return filter
  42.     end
  43.    
  44.     local modem = peripheral.wrap(side)
  45.     local periphs = modem.getNamesRemote()
  46.     for i=1, #periphs do
  47.         local wrapped = peripheral.wrap(periphs[i])
  48.     --  members[i] = wrapped
  49.         members[periphs[i]] = wrapped
  50.     end
  51.    
  52.     return setmetatable(obj, obj)
  53. end
Advertisement
Add Comment
Please, Sign In to add comment