From 6f3323caeda4c74d60101d029a34a2dab95ed97e Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 26 Dec 2010 16:26:21 +0000 Subject: max instances gets checked now git-svn-id: https://svn.spreadspace.org/gcsd/trunk@73 ac14a137-c7f1-4531-abe0-07747231d213 --- TODO | 1 - src/module_list.lua | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index 67387a1..200040c 100644 --- a/TODO +++ b/TODO @@ -5,7 +5,6 @@ * improve module loader (configurable path) * module API etc. clean-up, finalize, freeze * config-parser - * check max instances at modules (instance counter) * add modules - tcp - udp 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 -- cgit v1.2.3