From c35e1152fe8df4edc35c34de10e6c8b8b279b17b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Fri, 10 Aug 2012 10:52:17 +0800 Subject: [PATCH] fix api for filter --- lualib/skynet.lua | 11 ++++++++--- service/agent.lua | 12 +++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 3c4d16b6..c6787a0c 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -103,7 +103,7 @@ function skynet.ret(...) coroutine.yield("RETURN", ...) end -function skynet.default_dispatch(f) +local function default_dispatch(f) return function(session, address , msg, sz) if session <= 0 then session = - session @@ -121,10 +121,15 @@ function skynet.default_dispatch(f) end function skynet.dispatch(f) - c.callback(skynet.default_dispatch(f)) + c.callback(default_dispatch(f)) end -skynet.filter = assert(c.callback) +function skynet.filter(filter, f) + local func = default_dispatch(f) + c.callback(function (...) + func(filter(...)) + end) +end function skynet.start(f) local session = c.command("TIMEOUT","0") diff --git a/service/agent.lua b/service/agent.lua index 10145b5d..5c73a134 100644 --- a/service/agent.lua +++ b/service/agent.lua @@ -1,12 +1,6 @@ local skynet = require "skynet" local client = ... -local dispatch_handler = skynet.default_dispatch(function (msg,sz) - local message = skynet.tostring(msg,sz) - local result = skynet.call("SIMPLEDB",message) - skynet.ret(result) -end) - local session_id = 0 skynet.filter(function (session, address , msg, sz) if address == client then @@ -18,7 +12,11 @@ skynet.filter(function (session, address , msg, sz) else print("skynet message",msg,sz) end - dispatch_handler(session,address, msg,sz) + return session, address , msg, sz +end, function (msg,sz) + local message = skynet.tostring(msg,sz) + local result = skynet.call("SIMPLEDB",message) + skynet.ret(result) end) skynet.start(function()