Files
game-driver/internal/middleware/stop.go
2024-11-05 18:39:03 +08:00

33 lines
548 B
Go

package middleware
import (
"game-driver/internal/common"
"game-driver/leaf"
)
// 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() {
select {
case <-a:
case <-stopper.Done():
{
cancel()
leaf.WithValue[leaf.EndType](c, leaf.EndKey, leaf.EndStop)
}
}
}()
c.Next()
}
}