From 6554e4612a45ec30c60f75ba69b4dadc15fd5aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Fri, 24 Aug 2012 16:05:30 +0800 Subject: [PATCH] minor fix --- lua-int64/int64.c | 2 +- lualib/skynet.lua | 30 ++++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lua-int64/int64.c b/lua-int64/int64.c index 4c884edf..6d72c1bc 100644 --- a/lua-int64/int64.c +++ b/lua-int64/int64.c @@ -151,7 +151,7 @@ int64_new(lua_State *L) { if (base < 2) { luaL_error(L, "base must be >= 2"); } - const char * str = lua_tostring(L, 1); + const char * str = luaL_checkstring(L, 1); n = strtoll(str, NULL, base); _pushint64(L,n); break; diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 73221d29..85e7883f 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -128,7 +128,12 @@ function skynet.ret(...) coroutine.yield("RETURN", ...) end -local function default_dispatch(f) +local function default_dispatch(f, unknown) + unknown = unknown or function (session, msg, sz) + local self = skynet.self() + print(self, session,msg,sz) + error(string.format("%s Unknown session %d", self, session)) + end return function(session, address , msg, sz) if session == nil then return @@ -141,19 +146,22 @@ local function default_dispatch(f) suspend(co, coroutine.resume(co, msg, sz, session, address)) else local co = session_id_coroutine[session] - assert(co, session) - session_id_coroutine[session] = nil - suspend(co, coroutine.resume(co, msg, sz)) + if co == nil then + unknown(session,msg,sz) + else + session_id_coroutine[session] = nil + suspend(co, coroutine.resume(co, msg, sz)) + end end end end -function skynet.dispatch(f) - c.callback(default_dispatch(f)) +function skynet.dispatch(f,unknown) + c.callback(default_dispatch(f,unknown)) end -function skynet.filter(filter, f) - local func = default_dispatch(f) +function skynet.filter(filter, f, unknown) + local func = default_dispatch(f, unknown) c.callback(function (...) func(filter(...)) end) @@ -170,4 +178,10 @@ function skynet.start(f) session_id_coroutine[tonumber(session)] = co end +function skynet.newservice(name, ...) + local args = { "snlua" , name , ... } + local handle = skynet.call(".launcher", table.concat(args," ")) + return handle +end + return skynet