Software /
code /
prosody
File
util/pubsub.lua @ 1174:f7b6d5839092
modulemanager: require util.stanza
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sat, 16 May 2009 05:28:04 +0500 |
parent | 849:5049b4512df0 |
child | 1519:2c9a650ff1b7 |
line wrap: on
line source
local ipairs, pairs, setmetatable, type = ipairs, pairs, setmetatable, type; module "pubsub" local pubsub_node_mt = { __index = _M }; function new_node(name) return setmetatable({ name = name, subscribers = {} }, pubsub_node_mt); end function set_subscribers(node, subscribers_list, list_type) local subscribers = node.subscribers; if list_type == "array" then for _, jid in ipairs(subscribers_list) do if not subscribers[jid] then node:add_subscriber(jid); end end elseif (not list_type) or list_type == "set" then for jid in pairs(subscribers_list) do if type(jid) == "string" then node:add_subscriber(jid); end end end end function get_subscribers(node) return node.subscribers; end function publish(node, item, dispatcher, data) local subscribers = node.subscribers; for i = 1,#subscribers do item.attr.to = subscribers[i]; dispatcher(data, item); end end function add_subscriber(node, jid) local subscribers = node.subscribers; if not subscribers[jid] then local space = #subscribers; subscribers[space] = jid; subscribers[jid] = space; end end function remove_subscriber(node, subscriber) local subscribers = node.subscribers; if subscribers[jid] then subscribers[subscribers[jid]] = nil; subscribers[jid] = nil; end end return _M;