播放游戏时,停止待机任务

This commit is contained in:
2025-02-26 19:45:47 +08:00
parent 8b080a8081
commit 593d7758bf
19 changed files with 422 additions and 275 deletions

View File

@@ -0,0 +1,70 @@
package middleware
import (
"context"
"game-driver/internal/common"
"game-driver/leaf"
"go.uber.org/zap"
"sync"
)
func Pause(ctrl *common.CtrlWait) leaf.HandlerFunc {
return func(c *leaf.Context) {
var cancel context.CancelFunc
// 获取锚点
holdPoint := c.Hold()
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
// 结束信号通道
a := make(chan struct{})
// 发送结束信号
defer close(a)
run := true
// 保存原始的 Context
originalCtx := c.Context
wait.Add(1)
go func() {
defer wait.Done()
zap.S().Infoln("待机控制器")
for {
select {
case <-originalCtx.Done():
zap.S().Infoln("待机控制器监听结束")
return
case <-ctrl.R:
{
zap.S().Infoln("待机控制器 Resume 触发")
c.Context = originalCtx
run = true
}
case <-ctrl.P:
{
zap.S().Infoln("待机控制器 Pause 触发")
run = false
cancel()
}
}
}
}()
for {
select {
case <-originalCtx.Done():
return
default:
if run {
cancel = leaf.WithCancel(c)
c.Resume(holdPoint)
}
}
}
}
}