summaryrefslogtreecommitdiff
path: root/src/main_loop.lua
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2010-11-08 20:14:02 +0000
committerChristian Pointner <equinox@spreadspace.org>2010-11-08 20:14:02 +0000
commitc56fafa5a7e85af0aede981a2de5ddb337e2fa40 (patch)
treec0a9db84da108edbacca706d89d52185d6245869 /src/main_loop.lua
parentupdated 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.lua44
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