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 function docmd(cmdline, print, fd)
local split = split_cmdline(cmdline) local split = split_cmdline(cmdline)
local command = split[1] local command = split[1]
if command == "debug" then
table.insert(split, fd)
end
local cmd = COMMAND[command] local cmd = COMMAND[command]
local ok, list local ok, list
if cmd then if cmd then
ok, list = pcall(cmd, select(2,table.unpack(split))) ok, list = pcall(cmd, fd, select(2,table.unpack(split)))
else else
print("Invalid command, type help for command list") print("Invalid command, type help for command list")
end end
@@ -79,8 +76,9 @@ local function docmd(cmdline, print, fd)
end end
local function console_main_loop(stdin, print) local function console_main_loop(stdin, print)
socket.lock(stdin)
print("Welcome to skynet console") print("Welcome to skynet console")
skynet.error(stdin, "connected")
pcall(function()
while true do while true do
local cmdline = socket.readline(stdin, "\n") local cmdline = socket.readline(stdin, "\n")
if not cmdline then if not cmdline then
@@ -90,7 +88,9 @@ local function console_main_loop(stdin, print)
docmd(cmdline, print, stdin) docmd(cmdline, print, stdin)
end end
end end
socket.unlock(stdin) end)
skynet.error(stdin, "disconnected")
socket.close(stdin)
end end
skynet.start(function() skynet.start(function()
@@ -140,7 +140,7 @@ function COMMAND.clearcache()
codecache.clear() codecache.clear()
end end
function COMMAND.start(...) function COMMAND.start(fd, ...)
local ok, addr = pcall(skynet.newservice, ...) local ok, addr = pcall(skynet.newservice, ...)
if ok then if ok then
return { [skynet.address(addr)] = ... } return { [skynet.address(addr)] = ... }
@@ -149,7 +149,7 @@ function COMMAND.start(...)
end end
end end
function COMMAND.log(...) function COMMAND.log(fd, ...)
local ok, addr = pcall(skynet.call, ".launcher", "lua", "LOGLAUNCH", "snlua", ...) local ok, addr = pcall(skynet.call, ".launcher", "lua", "LOGLAUNCH", "snlua", ...)
if ok then if ok then
return { [skynet.address(addr)] = ... } return { [skynet.address(addr)] = ... }
@@ -158,7 +158,7 @@ function COMMAND.log(...)
end end
end end
function COMMAND.snax(...) function COMMAND.snax(fd, ...)
local ok, s = pcall(snax.newservice, ...) local ok, s = pcall(snax.newservice, ...)
if ok then if ok then
local addr = s.handle local addr = s.handle
@@ -191,7 +191,7 @@ function COMMAND.mem()
return skynet.call(".launcher", "lua", "MEM") return skynet.call(".launcher", "lua", "MEM")
end end
function COMMAND.kill(address) function COMMAND.kill(fd, address)
return skynet.call(".launcher", "lua", "KILL", address) return skynet.call(".launcher", "lua", "KILL", address)
end end
@@ -199,11 +199,11 @@ function COMMAND.gc()
return skynet.call(".launcher", "lua", "GC") return skynet.call(".launcher", "lua", "GC")
end end
function COMMAND.exit(address) function COMMAND.exit(fd, address)
skynet.send(adjust_address(address), "debug", "EXIT") skynet.send(adjust_address(address), "debug", "EXIT")
end end
function COMMAND.inject(address, filename) function COMMAND.inject(fd, address, filename)
address = adjust_address(address) address = adjust_address(address)
local f = io.open(filename, "rb") local f = io.open(filename, "rb")
if not f then if not f then
@@ -214,17 +214,17 @@ function COMMAND.inject(address, filename)
return skynet.call(address, "debug", "RUN", source, filename) return skynet.call(address, "debug", "RUN", source, filename)
end end
function COMMAND.task(address) function COMMAND.task(fd, address)
address = adjust_address(address) address = adjust_address(address)
return skynet.call(address,"debug","TASK") return skynet.call(address,"debug","TASK")
end end
function COMMAND.info(address) function COMMAND.info(fd, address)
address = adjust_address(address) address = adjust_address(address)
return skynet.call(address,"debug","INFO") return skynet.call(address,"debug","INFO")
end end
function COMMAND.debug(address, fd) function COMMAND.debug(fd, address)
address = adjust_address(address) address = adjust_address(address)
local agent = skynet.newservice "debug_agent" local agent = skynet.newservice "debug_agent"
local stop local stop
@@ -243,17 +243,17 @@ function COMMAND.debug(address, fd)
stop = true stop = true
end end
function COMMAND.logon(address) function COMMAND.logon(fd, address)
address = adjust_address(address) address = adjust_address(address)
core.command("LOGON", skynet.address(address)) core.command("LOGON", skynet.address(address))
end end
function COMMAND.logoff(address) function COMMAND.logoff(fd, address)
address = adjust_address(address) address = adjust_address(address)
core.command("LOGOFF", skynet.address(address)) core.command("LOGOFF", skynet.address(address))
end end
function COMMAND.signal(address, sig) function COMMAND.signal(fd, address, sig)
address = skynet.address(adjust_address(address)) address = skynet.address(adjust_address(address))
if sig then if sig then
core.command("SIGNAL", string.format("%s %d",address,sig)) core.command("SIGNAL", string.format("%s %d",address,sig))