blob: 47d9a6347430b230cd350db87078efe3a9396f13 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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
|