Fri, 26 Nov 2010 05:23:37 +0500
util.stanza, util.xmppstream, core.xmlhandlers: Allow stanza.last_add to be nil, and set it nil by default. Saves a table allocation per-element. 20% faster stanza building.
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; |