From d637d720db90f6ba869c6a1ebbbc04548087d8d9 Mon Sep 17 00:00:00 2001 From: hqwrong Date: Thu, 3 Nov 2016 14:55:42 +0800 Subject: [PATCH] snax loader --- lualib/snax/interface.lua | 43 ++++++++++++++++++--------------------- service/snaxd.lua | 4 +++- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lualib/snax/interface.lua b/lualib/snax/interface.lua index 5efb7410..e8c8d596 100644 --- a/lualib/snax/interface.lua +++ b/lualib/snax/interface.lua @@ -1,8 +1,24 @@ local skynet = require "skynet" +local function dft_loader(path, name, G) + local errlist = {} + + for pat in string.gmatch(path,"[^;]+") do + local filename = string.gsub(pat, "?", name) + local f , err = loadfile(filename, "bt", G) + if f then + return f, pat + else + table.insert(errlist, err) + end + end + + error(table.concat(errlist, "\n")) +end + return function (name , G, loader) - loader = loader or loadfile - local mainfunc + loader = loader or dft_loader + local mainfunc local function func_id(id, group) local tmp = {} @@ -61,27 +77,8 @@ return function (name , G, loader) local pattern - do - local path = assert(skynet.getenv "snax" , "please set snax in config file") - - local errlist = {} - - for pat in string.gmatch(path,"[^;]+") do - local filename = string.gsub(pat, "?", name) - local f , err = loader(filename, "bt", G) - if f then - pattern = pat - mainfunc = f - break - else - table.insert(errlist, err) - end - end - - if mainfunc == nil then - error(table.concat(errlist, "\n")) - end - end + local path = assert(skynet.getenv "snax" , "please set snax in config file") + mainfunc, pattern = loader(path, name, G) setmetatable(G, { __index = env , __newindex = init_system }) local ok, err = xpcall(mainfunc, debug.traceback) diff --git a/service/snaxd.lua b/service/snaxd.lua index 1b8ddee6..5aaa3353 100644 --- a/service/snaxd.lua +++ b/service/snaxd.lua @@ -5,7 +5,9 @@ local profile = require "profile" local snax = require "snax" local snax_name = tostring(...) -local func, pattern = snax_interface(snax_name, _ENV) +local loaderpath = skynet.getenv"snax_loader" +local loader = loaderpath and assert(dofile(loaderpath)) or require"snax.loader" +local func, pattern = snax_interface(snax_name, _ENV, loader) local snax_path = pattern:sub(1,pattern:find("?", 1, true)-1) .. snax_name .. "/" package.path = snax_path .. "?.lua;" .. package.path