Software /
code /
prosody
Annotate
util/pubsub.lua @ 3626:444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 13 Nov 2010 23:10:50 +0000 |
parent | 3619:291ae816d800 |
child | 3641:3603aeb325de |
rev | line source |
---|---|
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 | |
3626
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
24 function service:get_subscription(node, actor, jid) |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
25 local node_obj = self.nodes[node]; |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
26 if node_obj then |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
27 return node_obj.subscribers[jid]; |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
28 end |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
29 end |
444f965baed8
util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents:
3619
diff
changeset
|
30 |
3619 | 31 function service:publish(node, actor, id, item) |
32 local node_obj = self.nodes[node]; | |
33 if not node_obj then | |
34 node_obj = { name = node, subscribers = {}, config = {} }; | |
35 self.nodes[node] = node_obj; | |
36 end | |
37 node_obj.data = item; | |
38 self.cb.broadcaster(node, node_obj.subscribers, item); | |
39 return true; | |
40 end | |
41 | |
42 return _M; |