From c081816f06fe5dd5a0453adf13a328439f2cf18f Mon Sep 17 00:00:00 2001 From: xjdrew Date: Mon, 21 Apr 2014 17:50:04 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=8F=AF=E4=BB=A5=E5=9C=A8=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E8=BF=90=E8=A1=8C=E4=B8=AD=E5=8A=A8=E6=80=81require?= =?UTF-8?q?=20socket=202.=20=E6=B7=BB=E5=8A=A0=E6=96=B9=E6=B3=95skynet.ret?= =?UTF-8?q?pack/skynet.dispatch=5Funknown=5Frequest=203.=20skynet.filter?= =?UTF-8?q?=E9=80=8F=E4=BC=A0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lualib-src/lua-socket.c | 2 +- lualib/skynet.lua | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lualib-src/lua-socket.c b/lualib-src/lua-socket.c index 26be2110..fb66d93d 100644 --- a/lualib-src/lua-socket.c +++ b/lualib-src/lua-socket.c @@ -491,7 +491,7 @@ luaopen_socketdriver(lua_State *L) { if (lua == NULL || lua->ctx == NULL) { return luaL_error(L, "Init skynet context first"); } - assert(lua->L == L); + // assert(lua->L == L); lua_pop(L,1); lua_pushlightuserdata(L, lua->ctx); diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 139a5b29..6e72f4ad 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -316,6 +316,10 @@ function skynet.ret(msg, sz) coroutine_yield("RETURN", msg, sz) end +function skynet.retpack(...) + return skynet.ret(skynet.pack(...)) +end + function skynet.wakeup(co) if sleep_session[co] and wakeup_session[co] == nil then wakeup_session[co] = true @@ -329,6 +333,17 @@ function skynet.dispatch(typename, func) p.dispatch = func end +local function unknown_request(session, address, msg, sz) + print("Unknown request :" , c.tostring(msg,sz)) + error(string.format("Unknown session : %d from %x", session, address)) +end + +function skynet.dispatch_unknown_request(unknown) + local prev = unknown_request + unknown_request = unknown + return prev +end + local function unknown_response(session, address, msg, sz) print("Response message :" , c.tostring(msg,sz)) error(string.format("Unknown session : %d from %x", session, address)) @@ -352,7 +367,7 @@ function skynet.fork(func,...) table.insert(fork_queue, co) end -local function raw_dispatch_message(prototype, msg, sz, session, source) +local function raw_dispatch_message(prototype, msg, sz, session, source, ...) -- skynet.PTYPE_RESPONSE = 1, read skynet.h if prototype == 1 then local co = session_id_coroutine[session] @@ -371,10 +386,9 @@ local function raw_dispatch_message(prototype, msg, sz, session, source) local co = co_create(f) session_coroutine_id[co] = session session_coroutine_address[co] = source - suspend(co, coroutine.resume(co, session,source, p.unpack(msg,sz))) + suspend(co, coroutine.resume(co, session,source, p.unpack(msg,sz, ...))) else - print("Unknown request :" , p.unpack(msg,sz)) - error(string.format("Can't dispatch type %s : ", p.name)) + unknown_request(session, source, msg, sz) end end end