Implemented publish/subscribe lua bindings to libubus-lua with example lua files.
[project/ubus.git] / lua / publisher.lua
diff --git a/lua/publisher.lua b/lua/publisher.lua
new file mode 100755 (executable)
index 0000000..8ee3b83
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/env lua
+
+require "ubus"
+require "uloop"
+
+--[[
+  A demo of ubus publisher binding. Should be run before subscriber.lua
+--]]
+
+
+uloop.init()
+
+local conn = ubus.connect()
+if not conn then
+       error("Failed to connect to ubus")
+end
+
+local ubus_objects = {
+       test = {
+               hello = {
+                       function(req, msg)
+                               conn:reply(req, {message="foo"});
+                               print("Call to function 'hello'")
+                               for k, v in pairs(msg) do
+                                       print("key=" .. k .. " value=" .. tostring(v))
+                               end
+                       end, {id = ubus.INT32, msg = ubus.STRING }
+               },
+               hello1 = {
+                       function(req)
+                               conn:reply(req, {message="foo1"});
+                               conn:reply(req, {message="foo2"});
+                               print("Call to function 'hello1'")
+                       end, {id = ubus.INT32, msg = ubus.STRING }
+               },
+               __subscriber_cb = function( subs )
+                       print("total subs: ", subs )
+               end
+       }
+}
+
+conn:add( ubus_objects )
+print("Objects added, starting loop")
+
+-- start time
+local timer
+local counter = 0
+function t()
+       counter = counter + 1
+       local params = {
+               count = counter
+       }
+       conn:notify( ubus_objects.test.__ubusobj, "test.alarm", params )
+       timer:set(10000)
+end
+timer = uloop.timer(t)
+timer:set(1000)
+
+
+uloop.run()