summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2010-11-09 07:25:12 +0000
committerChristian Pointner <equinox@spreadspace.org>2010-11-09 07:25:12 +0000
commitae567d9d58e2deadda8f907d91fb8125bee04c7e (patch)
tree2edd4061621c1ff8fc96b8dfe11ed2dbf74678c5
parentadded 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/Makefile1
-rw-r--r--src/main_loop.lua86
-rw-r--r--src/module_list.lua63
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