Files
game-driver/internal/middleware/stop.go
2025-02-27 11:36:40 +08:00

45 lines
806 B
Go

package middleware
import (
"game-driver/internal/common"
"game-driver/leaf"
"go.uber.org/zap"
"sync"
)
// EmergencyStop 紧急停止中间件
func EmergencyStop(stopper common.Stopper) leaf.HandlerFunc {
return func(c *leaf.Context) {
cancel := leaf.WithCancel(c)
defer stopper.Reset()
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
// 结束信号通道
a := make(chan struct{})
// 发送结束信号
defer close(a)
zap.S().Infoln("监听停止信号")
wait.Add(1)
go func() {
defer wait.Done()
defer zap.S().Infoln("结束停止信号监听")
select {
case <-a:
case <-stopper.Done():
{
zap.S().Infoln("停止信号触发")
cancel()
leaf.WithValue[leaf.EndType](c, leaf.EndKey, leaf.EndStop)
}
}
}()
c.Next()
}
}