Blame view

publish/skynet/service/cdummy.lua 1.75 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  local skynet = require "skynet"
  require "skynet.manager"	-- import skynet.launch, ...
  
  local globalname = {}
  local queryname = {}
  local harbor = {}
  local harbor_service
  
  skynet.register_protocol {
  	name = "harbor",
  	id = skynet.PTYPE_HARBOR,
  	pack = function(...) return ... end,
  	unpack = skynet.tostring,
  }
  
  skynet.register_protocol {
  	name = "text",
  	id = skynet.PTYPE_TEXT,
  	pack = function(...) return ... end,
  	unpack = skynet.tostring,
  }
  
  local function response_name(name)
  	local address = globalname[name]
  	if queryname[name] then
  		local tmp = queryname[name]
  		queryname[name] = nil
  		for _,resp in ipairs(tmp) do
  			resp(true, address)
  		end
  	end
  end
  
  function harbor.REGISTER(name, handle)
  	assert(globalname[name] == nil)
  	globalname[name] = handle
  	response_name(name)
  	skynet.redirect(harbor_service, handle, "harbor", 0, "N " .. name)
  end
  
  function harbor.QUERYNAME(name)
  	if name:byte() == 46 then	-- "." , local name
  		skynet.ret(skynet.pack(skynet.localname(name)))
  		return
  	end
  	local result = globalname[name]
  	if result then
  		skynet.ret(skynet.pack(result))
  		return
  	end
  	local queue = queryname[name]
  	if queue == nil then
  		queue = { skynet.response() }
  		queryname[name] = queue
  	else
  		table.insert(queue, skynet.response())
  	end
  end
  
  function harbor.LINK(id)
  	skynet.ret()
  end
  
  function harbor.CONNECT(id)
  	skynet.error("Can't connect to other harbor in single node mode")
  end
  
  skynet.start(function()
  	local harbor_id = tonumber(skynet.getenv "harbor")
  	assert(harbor_id == 0)
  
  	skynet.dispatch("lua", function (session,source,command,...)
  		local f = assert(harbor[command])
  		f(...)
  	end)
  	skynet.dispatch("text", function(session,source,command)
  		-- ignore all the command
  	end)
  
  	harbor_service = assert(skynet.launch("harbor", harbor_id, skynet.self()))
  end)