修复投影仪控制
This commit is contained in:
66
internal/routes/standby_ctrl/pause.go
Normal file
66
internal/routes/standby_ctrl/pause.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package standby_ctrl
|
||||
|
||||
import (
|
||||
"context"
|
||||
"game-driver/internal/common"
|
||||
"go.uber.org/zap"
|
||||
"sync"
|
||||
)
|
||||
|
||||
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 {
|
||||
p := make(chan int8)
|
||||
defer close(p)
|
||||
|
||||
ps.Add(p)
|
||||
defer ps.Remove(p)
|
||||
|
||||
zap.S().Infoln("待机控制器")
|
||||
defer zap.S().Infoln("待机控制器结束")
|
||||
|
||||
// 等待组
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user