From 84b08bf286549f3a0f2817f5e3252e8a785ecbb9 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Fri, 6 May 2016 19:37:16 +0800 Subject: [PATCH] detect console fd closed --- service/debug_console.lua | 52 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/service/debug_console.lua b/service/debug_console.lua index a5e735c0..312cd0e6 100644 --- a/service/debug_console.lua +++ b/service/debug_console.lua @@ -52,13 +52,10 @@ end local function docmd(cmdline, print, fd) local split = split_cmdline(cmdline) local command = split[1] - if command == "debug" then - table.insert(split, fd) - end local cmd = COMMAND[command] local ok, list if cmd then - ok, list = pcall(cmd, select(2,table.unpack(split))) + ok, list = pcall(cmd, fd, select(2,table.unpack(split))) else print("Invalid command, type help for command list") end @@ -79,18 +76,21 @@ local function docmd(cmdline, print, fd) end local function console_main_loop(stdin, print) - socket.lock(stdin) print("Welcome to skynet console") - while true do - local cmdline = socket.readline(stdin, "\n") - if not cmdline then - break + skynet.error(stdin, "connected") + pcall(function() + while true do + local cmdline = socket.readline(stdin, "\n") + if not cmdline then + break + end + if cmdline ~= "" then + docmd(cmdline, print, stdin) + end end - if cmdline ~= "" then - docmd(cmdline, print, stdin) - end - end - socket.unlock(stdin) + end) + skynet.error(stdin, "disconnected") + socket.close(stdin) end skynet.start(function() @@ -140,7 +140,7 @@ function COMMAND.clearcache() codecache.clear() end -function COMMAND.start(...) +function COMMAND.start(fd, ...) local ok, addr = pcall(skynet.newservice, ...) if ok then return { [skynet.address(addr)] = ... } @@ -149,7 +149,7 @@ function COMMAND.start(...) end end -function COMMAND.log(...) +function COMMAND.log(fd, ...) local ok, addr = pcall(skynet.call, ".launcher", "lua", "LOGLAUNCH", "snlua", ...) if ok then return { [skynet.address(addr)] = ... } @@ -158,7 +158,7 @@ function COMMAND.log(...) end end -function COMMAND.snax(...) +function COMMAND.snax(fd, ...) local ok, s = pcall(snax.newservice, ...) if ok then local addr = s.handle @@ -191,7 +191,7 @@ function COMMAND.mem() return skynet.call(".launcher", "lua", "MEM") end -function COMMAND.kill(address) +function COMMAND.kill(fd, address) return skynet.call(".launcher", "lua", "KILL", address) end @@ -199,11 +199,11 @@ function COMMAND.gc() return skynet.call(".launcher", "lua", "GC") end -function COMMAND.exit(address) +function COMMAND.exit(fd, address) skynet.send(adjust_address(address), "debug", "EXIT") end -function COMMAND.inject(address, filename) +function COMMAND.inject(fd, address, filename) address = adjust_address(address) local f = io.open(filename, "rb") if not f then @@ -214,17 +214,17 @@ function COMMAND.inject(address, filename) return skynet.call(address, "debug", "RUN", source, filename) end -function COMMAND.task(address) +function COMMAND.task(fd, address) address = adjust_address(address) return skynet.call(address,"debug","TASK") end -function COMMAND.info(address) +function COMMAND.info(fd, address) address = adjust_address(address) return skynet.call(address,"debug","INFO") end -function COMMAND.debug(address, fd) +function COMMAND.debug(fd, address) address = adjust_address(address) local agent = skynet.newservice "debug_agent" local stop @@ -243,17 +243,17 @@ function COMMAND.debug(address, fd) stop = true end -function COMMAND.logon(address) +function COMMAND.logon(fd, address) address = adjust_address(address) core.command("LOGON", skynet.address(address)) end -function COMMAND.logoff(address) +function COMMAND.logoff(fd, address) address = adjust_address(address) core.command("LOGOFF", skynet.address(address)) end -function COMMAND.signal(address, sig) +function COMMAND.signal(fd, address, sig) address = skynet.address(adjust_address(address)) if sig then core.command("SIGNAL", string.format("%s %d",address,sig))