From 6d6be8dec6642e87955ebb2068db41e995932ef1 Mon Sep 17 00:00:00 2001 From: xjdrew <1454565+xjdrew@users.noreply.github.com> Date: Fri, 21 Jan 2022 10:34:00 +0800 Subject: [PATCH] skynet.service: add close (#1526) Co-authored-by: drew.zxj --- lualib/skynet/service.lua | 10 ++++++++++ service/service_provider.lua | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/lualib/skynet/service.lua b/lualib/skynet/service.lua index 341f34fc..674b19e6 100644 --- a/lualib/skynet/service.lua +++ b/lualib/skynet/service.lua @@ -34,6 +34,16 @@ function service.new(name, mainfunc, ...) return address end +function service.close(name) + local addr = skynet.call(get_provider(), "lua", "close", name) + if addr then + cache[name] = nil + skynet.kill(addr) + return true + end + return false +end + function service.query(name) if not cache[name] then cache[name] = skynet.call(get_provider(), "lua", "query", name) diff --git a/service/service_provider.lua b/service/service_provider.lua index 1d0e238a..8b17d603 100644 --- a/service/service_provider.lua +++ b/service/service_provider.lua @@ -91,6 +91,16 @@ function provider.test(name) end end +function provider.close(name) + local s = svr[name] + if not s or s.booting then + return skynet.ret(skynet.pack(nil)) + end + + svr[name] = nil + skynet.ret(skynet.pack(s.address)) +end + skynet.start(function() skynet.dispatch("lua", function(session, address, cmd, ...) provider[cmd](...)