Software /
code /
prosody
Annotate
util/pubsub.lua @ 3786:28d9fff67fed
mod_iq: Extra IQ get and set sub-events are now fired: "iq-{get,set}/{host,self,bare}/xmlns:tag" (when "iq/{host,self,bare}/xmlns:tag" is unhandled).
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 28 Nov 2010 02:24:26 +0500 |
parent | 3641:3603aeb325de |
child | 3672:b24db47995ac |
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 | |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
34 node_obj = { name = node, subscribers = {}, config = {}, data = {} }; |
3619 | 35 self.nodes[node] = node_obj; |
36 end | |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
37 node_obj.data[id] = item; |
3619 | 38 self.cb.broadcaster(node, node_obj.subscribers, item); |
39 return true; | |
40 end | |
41 | |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
42 function service:get(node, actor, id) |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
43 local node_obj = self.nodes[node]; |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
44 if node_obj then |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
45 if id then |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
46 return { node_obj.data[id] }; |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
47 else |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
48 return node_obj.data; |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
49 end |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
50 end |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
51 end |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
52 |
3619 | 53 return _M; |