summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2010-12-26 16:26:21 +0000
committerChristian Pointner <equinox@spreadspace.org>2010-12-26 16:26:21 +0000
commit6f3323caeda4c74d60101d029a34a2dab95ed97e (patch)
treeb548fc4224417e56ca669f37d53032e35cedf87d
parentremoved crapy require from module loader (diff)
max instances gets checked now
git-svn-id: https://svn.spreadspace.org/gcsd/trunk@73 ac14a137-c7f1-4531-abe0-07747231d213
-rw-r--r--TODO1
-rw-r--r--src/module_list.lua19
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