Software /
code /
prosody
File
util/broadcast.lua @ 2785:08e0659ba1f2
mod_httpserver: Rudimentary directory detection, return forbidden instead of causing a traceback (since commit 0325f241a26c)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 01 Jan 2010 21:32:23 +0000 |
parent | 1528:87c71e882437 |
child | 2923:b7049746bd29 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- 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, jid) local subscribers = node.subscribers; if subscribers[jid] then subscribers[subscribers[jid]] = nil; subscribers[jid] = nil; end end return _M;