Blame view

publish/skynet/lualib/loader.lua 968 Bytes
4d6f285d   zhouhaihai   增加发布功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  local args = {}
  for word in string.gmatch(..., "%S+") do
  	table.insert(args, word)
  end
  
  SERVICE_NAME = args[1]
  
  local main, pattern
  
  local err = {}
  for pat in string.gmatch(LUA_SERVICE, "([^;]+);*") do
  	local filename = string.gsub(pat, "?", SERVICE_NAME)
  	local f, msg = loadfile(filename)
  	if not f then
  		table.insert(err, msg)
  	else
  		pattern = pat
  		main = f
  		break
  	end
  end
  
  if not main then
  	error(table.concat(err, "\n"))
  end
  
  LUA_SERVICE = nil
  package.path , LUA_PATH = LUA_PATH
  package.cpath , LUA_CPATH = LUA_CPATH
  
  local service_path = string.match(pattern, "(.*/)[^/?]+$")
  
  if service_path then
  	service_path = string.gsub(service_path, "?", args[1])
  	package.path = service_path .. "?.lua;" .. package.path
  	SERVICE_PATH = service_path
  else
  	local p = string.match(pattern, "(.*/).+$")
  	SERVICE_PATH = p
  end
  
  if LUA_PRELOAD then
  	local f = assert(loadfile(LUA_PRELOAD))
  	f(table.unpack(args))
  	LUA_PRELOAD = nil
  end
  
  main(select(2, table.unpack(args)))