mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
snax loader
This commit is contained in:
@@ -1,8 +1,24 @@
|
|||||||
local skynet = require "skynet"
|
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)
|
return function (name , G, loader)
|
||||||
loader = loader or loadfile
|
loader = loader or dft_loader
|
||||||
local mainfunc
|
local mainfunc
|
||||||
|
|
||||||
local function func_id(id, group)
|
local function func_id(id, group)
|
||||||
local tmp = {}
|
local tmp = {}
|
||||||
@@ -61,27 +77,8 @@ return function (name , G, loader)
|
|||||||
|
|
||||||
local pattern
|
local pattern
|
||||||
|
|
||||||
do
|
local path = assert(skynet.getenv "snax" , "please set snax in config file")
|
||||||
local path = assert(skynet.getenv "snax" , "please set snax in config file")
|
mainfunc, pattern = loader(path, name, G)
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
setmetatable(G, { __index = env , __newindex = init_system })
|
setmetatable(G, { __index = env , __newindex = init_system })
|
||||||
local ok, err = xpcall(mainfunc, debug.traceback)
|
local ok, err = xpcall(mainfunc, debug.traceback)
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ local profile = require "profile"
|
|||||||
local snax = require "snax"
|
local snax = require "snax"
|
||||||
|
|
||||||
local snax_name = tostring(...)
|
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 .. "/"
|
local snax_path = pattern:sub(1,pattern:find("?", 1, true)-1) .. snax_name .. "/"
|
||||||
package.path = snax_path .. "?.lua;" .. package.path
|
package.path = snax_path .. "?.lua;" .. package.path
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user