package middleware import ( "game-driver/internal/common" "game-driver/leaf" "game-driver/pkg/logger" ) // EmergencyStop 紧急停止中间件 func EmergencyStop(stopper common.Stopper) leaf.HandlerFunc { return func(c *leaf.Context) { cancel := leaf.WithCancel(c) defer stopper.Reset() // 结束信号通道 a := make(chan struct{}) // 发送结束信号 defer close(a) go func() { defer logger.Infoln("结束停止信号监控") select { case <-a: case <-stopper.Done(): { logger.Infoln("紧急停止信号触发") cancel() leaf.WithValue[leaf.EndType](c, leaf.EndKey, leaf.EndStop) } } }() c.Next() } }