12345678910111213141516171819202122232425262728293031323334353637383940 |
- local skynet = require "skynet"
- -- It's a simple service exit monitor, you can do something more when a service exit.
- local service_map = {}
- skynet.register_protocol {
- name = "client",
- id = skynet.PTYPE_CLIENT, -- PTYPE_CLIENT = 3
- unpack = function() end,
- dispatch = function(_, address)
- local w = service_map[address]
- if w then
- for watcher in pairs(w) do
- skynet.redirect(watcher, address, "error", 0, "")
- end
- service_map[address] = false
- end
- end
- }
- local function monitor(session, watcher, command, service)
- assert(command, "WATCH")
- local w = service_map[service]
- if not w then
- if w == false then
- skynet.ret(skynet.pack(false))
- return
- end
- w = {}
- service_map[service] = w
- end
- w[watcher] = true
- skynet.ret(skynet.pack(true))
- end
- skynet.start(function()
- skynet.dispatch("lua", monitor)
- end)
|