author | Matthew Wild <mwild1@gmail.com> |
Sat, 13 Nov 2010 23:10:50 +0000 | |
changeset 3626 | 444f965baed8 |
parent 3619 | 291ae816d800 |
child 3641 | 3603aeb325de |
permissions | -rw-r--r-- |
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; |