3619
|
1 module("pubsub", package.seeall);
|
|
2
|
|
3 local service = {};
|
|
4 local service_mt = { __index = service };
|
|
5
|
|
6 function new(cb)
|
|
7 return setmetatable({ cb = cb or {}, nodes = {} }, service_mt);
|
|
8 end
|
|
9
|
|
10 function service:add_subscription(node, actor, jid)
|
|
11 local node_obj = self.nodes[node];
|
|
12 if not node_obj then
|
|
13 return false, "item-not-found";
|
|
14 end
|
|
15 node_obj.subscribers[jid] = true;
|
|
16 return true;
|
|
17 end
|
|
18
|
|
19 function service:remove_subscription(node, actor, jid)
|
|
20 self.nodes[node].subscribers[jid] = nil;
|
|
21 return true;
|
|
22 end
|
|
23
|
|
24 function service:publish(node, actor, id, item)
|
|
25 local node_obj = self.nodes[node];
|
|
26 if not node_obj then
|
|
27 node_obj = { name = node, subscribers = {}, config = {} };
|
|
28 self.nodes[node] = node_obj;
|
|
29 end
|
|
30 node_obj.data = item;
|
|
31 self.cb.broadcaster(node, node_obj.subscribers, item);
|
|
32 return true;
|
|
33 end
|
|
34
|
|
35 return _M;
|