diff options
author | Christian Pointner <equinox@spreadspace.org> | 2010-11-08 20:14:02 +0000 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2010-11-08 20:14:02 +0000 |
commit | c56fafa5a7e85af0aede981a2de5ddb337e2fa40 (patch) | |
tree | c0a9db84da108edbacca706d89d52185d6245869 /src/main_loop.lua | |
parent | updated main_loop (diff) |
moved debug shell to modules
git-svn-id: https://svn.spreadspace.org/gcsd/trunk@10 ac14a137-c7f1-4531-abe0-07747231d213
Diffstat (limited to 'src/main_loop.lua')
-rw-r--r-- | src/main_loop.lua | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/main_loop.lua b/src/main_loop.lua index da48515..68924df 100644 --- a/src/main_loop.lua +++ b/src/main_loop.lua @@ -30,7 +30,8 @@ -- along with gcsd. If not, see <http://www.gnu.org/licenses/>. -- -socket = require("socket") +local socket = require("socket") +local defines = require("defines") function main_loop(opt) log.printf(log.NOTICE, "main_loop started") @@ -41,20 +42,23 @@ function main_loop(opt) log.printf(log.DEBUG, "gcsd input[%d] = %s", idx, input) 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") + end package.path = old_path - table.insert(modules, dummy.new("module config")) - + table.insert(modules, dummy.new({})) if(opt.debug) then - local ret = debug_shell.init("localhost", 9000) - if(ret == nil) then return -1 end + table.insert(modules, debug_shell.new({[host]="127.0.0.1", [port]="9000"})) end +-------- local return_value = 0 while return_value == 0 do @@ -65,14 +69,17 @@ function main_loop(opt) table.insert(readables, fd) end end +-- TODO: add read handles of all clients + local writeables = { } for _, module in ipairs(modules) do for _, fd in ipairs(module.get_write_handles()) do table.insert(writeables, fd) end end +-- TODO: add write handles of all clients - local readable, writeable, err = socket.select(readables , writeables) + local readable, writeable, err = socket.select(readables, writeables) if(err) then log.printf(log.ERROR, "select returned with error: %s", err) return_value = -1 @@ -81,24 +88,33 @@ function main_loop(opt) if(input == sig) then return_value = signal.handle() if(return_value == 1) then break end - elseif(input == debug_shell.socks[1] or input == debug_shell.socks[2]) then - return_value = debug_shell.handle(input) - if(return_value == 2) then break end else - input.read() + local ret = input.read() + if(ret == defines.KILL_DAEMON) then + return_value = 2 + break + elseif(ret == defines.KILL_MODULE_TYPE) then + -- TODO: remove all modules of same type as this and + -- unload module + elseif(ret == defines.KILL_MODULE) then + -- TODO: remove module + elseif(ret == defines.KILL_CLIENT) then + -- TODO: remove client from list + end end end for _, output in ipairs(writeable) do - output.write() + ret = output.write() + if(ret ~= defines.OK) then + -- TODO: remove client from list + end end end end if(return_value == 2) then return_value = 0 end - if(opt.debug) then - debug_shell.close(); - end + -- TODO: cleanup clients and modules signal.stop() return return_value end |