mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
snax loader
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user