Software / code / prosody
Comparison
core/componentmanager.lua @ 1853:5da0e3b1f847
Merge with 0.5
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 30 Sep 2009 11:06:02 +0100 |
| parent | 1775:5c035b7a6de1 |
| parent | 1851:0a4d4ba01db8 |
| child | 1939:2c295826a96d |
comparison
equal
deleted
inserted
replaced
| 1847:1842da566c7d | 1853:5da0e3b1f847 |
|---|---|
| 9 local prosody = prosody; | 9 local prosody = prosody; |
| 10 local log = require "util.logger".init("componentmanager"); | 10 local log = require "util.logger".init("componentmanager"); |
| 11 local configmanager = require "core.configmanager"; | 11 local configmanager = require "core.configmanager"; |
| 12 local modulemanager = require "core.modulemanager"; | 12 local modulemanager = require "core.modulemanager"; |
| 13 local jid_split = require "util.jid".split; | 13 local jid_split = require "util.jid".split; |
| 14 local fire_event = require "core.eventmanager".fire_event; | |
| 14 local events_new = require "util.events".new; | 15 local events_new = require "util.events".new; |
| 15 local st = require "util.stanza"; | 16 local st = require "util.stanza"; |
| 16 local hosts = hosts; | 17 local hosts = hosts; |
| 17 | 18 |
| 18 local pairs, type, tostring = pairs, type, tostring; | 19 local pairs, type, tostring = pairs, type, tostring; |
| 34 function load_enabled_components(config) | 35 function load_enabled_components(config) |
| 35 local defined_hosts = config or configmanager.getconfig(); | 36 local defined_hosts = config or configmanager.getconfig(); |
| 36 | 37 |
| 37 for host, host_config in pairs(defined_hosts) do | 38 for host, host_config in pairs(defined_hosts) do |
| 38 if host ~= "*" and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then | 39 if host ~= "*" and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then |
| 39 hosts[host] = { type = "component", host = host, connected = false, s2sout = {}, events = events_new() }; | 40 hosts[host] = create_component(host); |
| 41 hosts[host].connected = false; | |
| 40 components[host] = default_component_handler; | 42 components[host] = default_component_handler; |
| 41 local ok, err = modulemanager.load(host, host_config.core.component_module); | 43 local ok, err = modulemanager.load(host, host_config.core.component_module); |
| 42 if not ok then | 44 if not ok then |
| 43 log("error", "Error loading %s component %s: %s", tostring(host_config.core.component_module), tostring(host), tostring(err)); | 45 log("error", "Error loading %s component %s: %s", tostring(host_config.core.component_module), tostring(host), tostring(err)); |
| 44 else | 46 else |
| 47 fire_event("component-activated", host, host_config); | |
| 45 log("debug", "Activated %s component: %s", host_config.core.component_module, host); | 48 log("debug", "Activated %s component: %s", host_config.core.component_module, host); |
| 46 end | 49 end |
| 47 end | 50 end |
| 48 end | 51 end |
| 49 end | 52 end |
| 63 else | 66 else |
| 64 log("error", "Component manager recieved a stanza for a non-existing component: "..tostring(stanza)); | 67 log("error", "Component manager recieved a stanza for a non-existing component: "..tostring(stanza)); |
| 65 end | 68 end |
| 66 end | 69 end |
| 67 | 70 |
| 68 function create_component(host, component) | 71 function create_component(host, component, events) |
| 69 -- TODO check for host well-formedness | 72 -- TODO check for host well-formedness |
| 70 return { type = "component", host = host, connected = true, s2sout = {}, events = events_new() }; | 73 return { type = "component", host = host, connected = true, s2sout = {}, events = events or events_new() }; |
| 71 end | 74 end |
| 72 | 75 |
| 73 function register_component(host, component, session) | 76 function register_component(host, component, session) |
| 74 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then | 77 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then |
| 75 local old_events = hosts[host] and hosts[host].events; | 78 local old_events = hosts[host] and hosts[host].events; |
| 76 | 79 |
| 77 components[host] = component; | 80 components[host] = component; |
| 78 hosts[host] = session or create_component(host, component); | 81 hosts[host] = session or create_component(host, component, old_events); |
| 79 | 82 |
| 80 -- Add events object if not already one | 83 -- Add events object if not already one |
| 81 if not hosts[host].events then | 84 if not hosts[host].events then |
| 82 hosts[host].events = old_events or events_new(); | 85 hosts[host].events = old_events or events_new(); |
| 83 end | 86 end |