author | Florian Zeitz <florob@babelmonkeys.de> |
Thu, 25 Nov 2010 21:47:12 +0100 | |
changeset 3641 | 3603aeb325de |
parent 3626 | 444f965baed8 |
child 3672 | b24db47995ac |
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 |
|
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; |