summaryrefslogtreecommitdiff
path: root/examples/resources/lib/pubsub.lua
blob: 2847d92cf301fad12ec609ce00b915c5f82fea22 (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
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:subscribe( name, func )
	table.insert( self.signals[ name ], func )
end

function PubSub:unSubscribe( name, uFunc )
	for i, func in ipairs( self.signals[ name ] ) do
		if func == uFunc then
			table.remove( self.signals[ name ], i )
		end
	end
end

function PubSub:publish( name, ... )
	for _, func in ipairs( self.signals[ name ] ) do
		func( ... )
	end
end

return PubSub