47 lines
849 B
Lua
47 lines
849 B
Lua
local PubSub = {}
|
|
PubSub.__index = PubSub
|
|
|
|
function PubSub:new()
|
|
local object = setmetatable( {}, self )
|
|
|
|
object.signals = {}
|
|
|
|
return object
|
|
end
|
|
|
|
function PubSub:add( name )
|
|
self.signals[ name ] = {}
|
|
end
|
|
|
|
function PubSub:remove( name )
|
|
if self.signals[ name ] ~= nil then
|
|
table.remove( self.signals, name )
|
|
end
|
|
end
|
|
|
|
function PubSub:subscribe( name, func )
|
|
if self.signals[ name ] ~= nil then
|
|
table.insert( self.signals[ name ], func )
|
|
end
|
|
end
|
|
|
|
function PubSub:unSubscribe( name, uFunc )
|
|
if self.signals[ name ] ~= nil then
|
|
for i, func in ipairs( self.signals[ name ] ) do
|
|
if func == uFunc then
|
|
table.remove( self.signals[ name ], i )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PubSub:publish( name, ... )
|
|
if self.signals[ name ] ~= nil then
|
|
for _, func in ipairs( self.signals[ name ] ) do
|
|
func( ... )
|
|
end
|
|
end
|
|
end
|
|
|
|
return PubSub
|