Skip to content

Commit c081816

Browse files
committed
1. 可以在服务运行中动态require socket
2. 添加方法skynet.retpack/skynet.dispatch_unknown_request 3. skynet.filter透传参数
1 parent c577a4f commit c081816

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

Diff for: lualib-src/lua-socket.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ luaopen_socketdriver(lua_State *L) {
491491
if (lua == NULL || lua->ctx == NULL) {
492492
return luaL_error(L, "Init skynet context first");
493493
}
494-
assert(lua->L == L);
494+
// assert(lua->L == L);
495495
lua_pop(L,1);
496496

497497
lua_pushlightuserdata(L, lua->ctx);

Diff for: lualib/skynet.lua

+18-4
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ function skynet.ret(msg, sz)
316316
coroutine_yield("RETURN", msg, sz)
317317
end
318318

319+
function skynet.retpack(...)
320+
return skynet.ret(skynet.pack(...))
321+
end
322+
319323
function skynet.wakeup(co)
320324
if sleep_session[co] and wakeup_session[co] == nil then
321325
wakeup_session[co] = true
@@ -329,6 +333,17 @@ function skynet.dispatch(typename, func)
329333
p.dispatch = func
330334
end
331335

336+
local function unknown_request(session, address, msg, sz)
337+
print("Unknown request :" , c.tostring(msg,sz))
338+
error(string.format("Unknown session : %d from %x", session, address))
339+
end
340+
341+
function skynet.dispatch_unknown_request(unknown)
342+
local prev = unknown_request
343+
unknown_request = unknown
344+
return prev
345+
end
346+
332347
local function unknown_response(session, address, msg, sz)
333348
print("Response message :" , c.tostring(msg,sz))
334349
error(string.format("Unknown session : %d from %x", session, address))
@@ -352,7 +367,7 @@ function skynet.fork(func,...)
352367
table.insert(fork_queue, co)
353368
end
354369

355-
local function raw_dispatch_message(prototype, msg, sz, session, source)
370+
local function raw_dispatch_message(prototype, msg, sz, session, source, ...)
356371
-- skynet.PTYPE_RESPONSE = 1, read skynet.h
357372
if prototype == 1 then
358373
local co = session_id_coroutine[session]
@@ -371,10 +386,9 @@ local function raw_dispatch_message(prototype, msg, sz, session, source)
371386
local co = co_create(f)
372387
session_coroutine_id[co] = session
373388
session_coroutine_address[co] = source
374-
suspend(co, coroutine.resume(co, session,source, p.unpack(msg,sz)))
389+
suspend(co, coroutine.resume(co, session,source, p.unpack(msg,sz, ...)))
375390
else
376-
print("Unknown request :" , p.unpack(msg,sz))
377-
error(string.format("Can't dispatch type %s : ", p.name))
391+
unknown_request(session, source, msg, sz)
378392
end
379393
end
380394
end

0 commit comments

Comments
 (0)