Advertisement
lvs

Dispatcher.lua

lvs
Mar 26th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.07 KB | None | 0 0
  1. local _M = {}
  2.  
  3. local listeners = {}
  4.  
  5. if not table.deepcopy then
  6.     function table.deepcopy(t)
  7.         if type(t) ~= 'table' then return t end
  8.         local mt = getmetatable(t)
  9.         local res = {}
  10.         for k,v in pairs(t) do
  11.             if type(v) == 'table' then
  12.                 v = table.deepcopy(v)
  13.             end
  14.             res[k] = v
  15.         end
  16.         setmetatable(res,mt)
  17.         return res
  18.     end
  19. end
  20.  
  21. function _M.addListener(name, listener)
  22.     if not name or not listener then return end
  23.     if not listeners[name] then listeners[name] = {} end
  24.     table.insert(listeners[name], listener)
  25. end
  26.  
  27. function _M.removeListener(name, listener)
  28.     if not name or not listener or not listeners[name] then return end
  29.     local ind = table.indexOf(listeners[name], listener)
  30.     if ind then table.remove(listeners[name], ind) end
  31. end
  32.  
  33. function _M.dispatch(name, params)
  34.     if not name or not listeners[name] then return end
  35.     local l = listeners[name]
  36.     for i = 1, #l do
  37.         l[i](params and table.deepcopy(params))
  38.     end
  39. end
  40.  
  41. return _M
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement