detect console fd closed

This commit is contained in:
Cloud Wu
2016-05-06 19:37:16 +08:00
parent 4ada09b93c
commit 84b08bf286

View File

@@ -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))