diff options
author | Christian Pointner <equinox@spreadspace.org> | 2010-11-09 07:25:12 +0000 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2010-11-09 07:25:12 +0000 |
commit | ae567d9d58e2deadda8f907d91fb8125bee04c7e (patch) | |
tree | 2edd4061621c1ff8fc96b8dfe11ed2dbf74678c5 | |
parent | added TODO list (diff) |
small cleanup (added module list)
git-svn-id: https://svn.spreadspace.org/gcsd/trunk@14 ac14a137-c7f1-4531-abe0-07747231d213
-rw-r--r-- | src/Makefile | 1 | ||||
-rw-r--r-- | src/main_loop.lua | 86 | ||||
-rw-r--r-- | src/module_list.lua | 63 |
3 files changed, 99 insertions, 51 deletions
diff --git a/src/Makefile b/src/Makefile index bd29b35..abad7a5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -52,6 +52,7 @@ C_SRCS := $(C_OBJS:%.o=%.c) #MODULE_SRC := $(MODULES:%=modules/%.lua) LUA_SRCS := client_list.lua \ + module_list.lua \ main_loop.lua LUA_BYTECODE := $(EXECUTABLE).lc diff --git a/src/main_loop.lua b/src/main_loop.lua index b293ee1..0ccaf01 100644 --- a/src/main_loop.lua +++ b/src/main_loop.lua @@ -33,61 +33,48 @@ local socket = require("socket") local defines = require("defines") -function main_loop(opt) - log.printf(log.NOTICE, "main_loop started") - local sig = signal.init() - - log.printf(log.DEBUG, "gcsd output = %s", opt.cmd_out) - for idx, input in ipairs(opt.cmd_ins) do - log.printf(log.DEBUG, "gcsd input[%d] = %s", idx, input) +function get_readables(sig) + local readables = { sig } + for _, module in ipairs(module_list.modules) do + for _, fd in ipairs(module:get_read_handles()) do + table.insert(readables, fd) + end + end + for _, client in ipairs(client_list.clients) do + for _, fd in ipairs(client:get_read_handles()) do + table.insert(readables, fd) + end end + + return readables +end ---- TODO: load configured modules (use own module loader) - local modules = {} - -- parse module config - local old_path = package.path - package.path = "./modules/?.lua" - dummy = require ("dummy") - if(opt.debug) then - debug_shell = require ("debug_shell") +function get_writeables() + local writeables = { } + for _, module in ipairs(module_list.modules) do + for _, fd in ipairs(module:get_write_handles()) do + table.insert(writeables, fd) + end + end + for _, client in ipairs(client_list.clients) do + for _, fd in ipairs(client:get_write_handles()) do + table.insert(writeables, fd) + end end - package.path = old_path + + return writeables +end +function main_loop(opt) + log.printf(log.NOTICE, "main_loop started") + local sig = signal.init() - table.insert(modules, dummy:new({})) - if(opt.debug) then - table.insert(modules, debug_shell:new({["host"]="127.0.0.1", ["port"]="9000"})) - end --------- + -- initialize modules + module_list:init(opt) local return_value = 0 while return_value == 0 do - - local readables = { sig } - for _, module in ipairs(modules) do - for _, fd in ipairs(module:get_read_handles()) do - table.insert(readables, fd) - end - end - for _, client in ipairs(client_list.clients) do - for _, fd in ipairs(client:get_read_handles()) do - table.insert(readables, fd) - end - end - - local writeables = { } - for _, module in ipairs(modules) do - for _, fd in ipairs(module:get_write_handles()) do - table.insert(writeables, fd) - end - end - for _, client in ipairs(client_list.clients) do - for _, fd in ipairs(client:get_write_handles()) do - table.insert(writeables, fd) - end - end - - local readable, writeable, err = socket.select(readables, writeables) + local readable, writeable, err = socket.select(get_readables(), get_writeables()) if(err) then log.printf(log.ERROR, "select returned with error: %s", err) return_value = -1 @@ -122,10 +109,7 @@ function main_loop(opt) if(return_value == 2) then return_value = 0 end - for _, module in ipairs(modules) do - module:cleanup() - end - + module_list:cleanup() signal.stop() return return_value end diff --git a/src/module_list.lua b/src/module_list.lua new file mode 100644 index 0000000..4a706cc --- /dev/null +++ b/src/module_list.lua @@ -0,0 +1,63 @@ +-- +-- gcsd +-- +-- gcsd the generic command sequencer daemon can be used to serialize +-- commands sent over various paralell communication channels to a +-- single command output. It can be seen as a multiplexer for any +-- kind of communication between a single resource and various clients +-- which want to submit commands to it or query information from it. +-- gcsd is written in C and Lua. The goal is to provide an easy to +-- understand high level API based on Lua which can be used to +-- implement the business logic of the so formed multiplexer daemon. +-- +-- +-- Copyright (C) 2009-2010 Markus Grueneis <gimpf@spreadspace.org> +-- Christian Pointner <equinox@spreadspace.org> +-- +-- This file is part of gcsd. +-- +-- gcsd is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- any later version. +-- +-- gcsd is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with gcsd. If not, see <http://www.gnu.org/licenses/>. +-- + +module_list = {} + +module_list.modules = {} + +function module_list:init(opt) + log.printf(log.DEBUG, "gcsd output = %s", opt.cmd_out) + for idx, input in ipairs(opt.cmd_ins) do + log.printf(log.DEBUG, "gcsd input[%d] = %s", idx, input) + end + +--- TODO: load configured modules (use own module loader) + local old_path = package.path + package.path = "./modules/?.lua" + dummy = require ("dummy") + if(opt.debug) then + debug_shell = require ("debug_shell") + end + package.path = old_path + + + table.insert(self.modules, dummy:new({})) + if(opt.debug) then + table.insert(self.modules, debug_shell:new({["host"]="127.0.0.1", ["port"]="9000"})) + end +end + +function module_list:cleanup() + for _, module in ipairs(self.modules) do + module:cleanup() + end +end |