From 7df13e922b8fa791958ad325542d1d428d5426cc Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Fri, 20 Apr 2018 11:44:05 +0800 Subject: [PATCH] add testtimeout --- test/testtimeout.lua | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/testtimeout.lua diff --git a/test/testtimeout.lua b/test/testtimeout.lua new file mode 100644 index 00000000..94355ab2 --- /dev/null +++ b/test/testtimeout.lua @@ -0,0 +1,53 @@ +local skynet = require "skynet" +local service = require "skynet.service" + +local function test_service() + local skynet = require "skynet" + + skynet.start(function() + skynet.dispatch("lua", function() + skynet.error("Wait for 1s") + skynet.sleep(100) -- response after 1s for any request + skynet.ret() + end) + end) +end + +local function timeout_call(ti, ...) + local co = coroutine.running() + local ret + + skynet.fork(function(...) + ret = table.pack(pcall(skynet.call, ...)) + if co then + skynet.wakeup(co) + end + end, ...) + + skynet.sleep(ti) + co = nil -- prevent wakeup after call + if ret then + if ret[1] then + return table.unpack(ret, 1, ret.n) + else + error(ret[2]) + end + else + -- timeout + return false + end +end + +skynet.start(function() + local test = service.new("testtimeout", test_service) + skynet.error("1", skynet.now()) + skynet.call(test, "lua") + skynet.error("2", skynet.now()) + skynet.error(timeout_call(50, test, "lua")) + skynet.error("3", skynet.now()) + skynet.exit() +end) + + + +