From 18b9598f5a807b1b21b380edcdf65b6cb0b88a57 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Thu, 6 Jul 2023 16:13:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87=20?= =?UTF-8?q?server.Server.RegStopEvent()=20=E5=87=BD=E6=95=B0=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=85=B3=E9=97=AD=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/event.go | 14 ++++++++++++++ server/server.go | 1 + 2 files changed, 15 insertions(+) diff --git a/server/event.go b/server/event.go index 4ce4063e..7d2bc1bb 100644 --- a/server/event.go +++ b/server/event.go @@ -12,6 +12,7 @@ import ( type StartBeforeEventHandle func(srv *Server) type StartFinishEventHandle func(srv *Server) +type StopEventHandle func(srv *Server) type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte) type ConnectionReceiveWebsocketPacketEventHandle func(srv *Server, conn *Conn, packet []byte, messageType int) type ConnectionOpenedEventHandle func(srv *Server, conn *Conn) @@ -25,6 +26,7 @@ type event struct { *Server startBeforeEventHandles []StartBeforeEventHandle startFinishEventHandles []StartFinishEventHandle + stopEventHandles []StopEventHandle connectionReceivePacketEventHandles []ConnectionReceivePacketEventHandle connectionReceiveWebsocketPacketEventHandles []ConnectionReceiveWebsocketPacketEventHandle connectionOpenedEventHandles []ConnectionOpenedEventHandle @@ -38,6 +40,18 @@ type event struct { consoleCommandEventHandleInitOnce sync.Once } +// RegStopEvent 服务器停止时将立即执行被注册的事件处理函数 +func (slf *event) RegStopEvent(handle StopEventHandle) { + slf.stopEventHandles = append(slf.stopEventHandles, handle) + log.Info("Server", zap.String("RegEvent", runtimes.CurrentRunningFuncName()), zap.String("handle", reflect.TypeOf(handle).String())) +} + +func (slf *event) OnStopEvent() { + for _, handle := range slf.stopEventHandles { + handle(slf.Server) + } +} + // RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数 // - 默认将注册 "exit", "quit", "close", "shutdown", "EXIT", "QUIT", "CLOSE", "SHUTDOWN" 指令作为关闭服务器的指令 // - 可通过注册默认指令进行默认行为的覆盖 diff --git a/server/server.go b/server/server.go index 4ef827fe..4017bb2f 100644 --- a/server/server.go +++ b/server/server.go @@ -364,6 +364,7 @@ func (slf *Server) Ticker() *timer.Ticker { // Shutdown 停止运行服务器 func (slf *Server) Shutdown(err error, stack ...string) { + slf.OnStopEvent() defer func() { if slf.multipleRuntimeErrorChan != nil { slf.multipleRuntimeErrorChan <- err