diff options
Diffstat (limited to 'src/module_list.lua')
-rw-r--r-- | src/module_list.lua | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/module_list.lua b/src/module_list.lua index 5ddb845..706c9c0 100644 --- a/src/module_list.lua +++ b/src/module_list.lua @@ -57,6 +57,21 @@ setmetatable(module_list.classes, mt) module_list.inputs = {} module_list.output = nil +function module_list:new_instance(class_name, config, runtype) + class = self.classes[class_name] + if(class.__num_inst) then + if(class.properties.max_instances >= 1 and + class.__num_inst >= class.properties.max_instances) then + error("max instances of " .. class_name .. " reached"); + end + class.__num_inst = class.__num_inst + 1 + else + class.__num_inst = 1 + end + + return class:new(config, runtype) +end + function module_list:init(opt) local class, config = self:parse_config(opt.cmd_out) if(not class) then return defines.KILL_DAEMON end @@ -69,7 +84,7 @@ function module_list:init(opt) for k, v in pairs(config) do log.printf(log.DEBUG, " config['%s'] = '%s'", k, v) end - self.output = self.classes[class]:new(config, defines.OUT_MODULE) + self.output = self:new_instance(class, config, defines.OUT_MODULE) for idx, input in ipairs(opt.cmd_ins) do local class, config = self:parse_config(input) @@ -85,7 +100,7 @@ function module_list:init(opt) for k, v in pairs(config) do log.printf(log.DEBUG, " config['%s'] = '%s'", k, v) end - table.insert(self.inputs, self.classes[class]:new(config, defines.IN_MODULE)) + table.insert(self.inputs, self:new_instance(class, config, defines.IN_MODULE)) end return defines.OK |