diff --git a/server/event.go b/server/event.go index 4ce4063..7d2bc1b 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 4ef827f..4017bb2 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