summaryrefslogtreecommitdiff
path: root/examples/resources/lib/pubsub.lua
diff options
context:
space:
mode:
Diffstat (limited to 'examples/resources/lib/pubsub.lua')
-rw-r--r--examples/resources/lib/pubsub.lua34
1 files changed, 34 insertions, 0 deletions
diff --git a/examples/resources/lib/pubsub.lua b/examples/resources/lib/pubsub.lua
new file mode 100644
index 0000000..2847d92
--- /dev/null
+++ b/examples/resources/lib/pubsub.lua
@@ -0,0 +1,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