Files

65 lines
1.1 KiB
Go

package standby_ctrl
import (
"context"
"game-driver/internal/common"
"go.uber.org/zap"
"sync"
)
// Pause 暂停控制器
func Pause(ps *common.PauseSub, isPause bool, play func(c context.Context) error) func(c context.Context) error {
return func(c context.Context) error {
var cancel context.CancelFunc
run := true
if isPause {
zap.S().Infoln("待机暂停控制器")
defer zap.S().Infoln("待机暂停控制器结束")
p := ps.GetNew()
defer ps.Close(p)
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
wait.Add(1)
go func() {
defer wait.Done()
for {
select {
case <-c.Done():
return
case v := <-p:
if v == 1 {
zap.S().Infoln("待机控制器 Pause 触发")
run = false
cancel()
} else {
zap.S().Infoln("待机控制器 Resume 触发")
run = true
}
}
}
}()
}
for {
select {
case <-c.Done():
return nil
default:
if run {
nc, cc := context.WithCancel(c)
cancel = cc
err := play(nc)
if err != nil {
zap.S().Infoln("执行后续操作异常: ", err)
}
}
}
}
}
}