Files
game-driver/internal/routes/play/push_card.go

55 lines
1012 B
Go

package play
import (
"game-driver/internal/middleware"
"game-driver/internal/routes/play/card_device"
"game-driver/internal/schema"
"game-driver/leaf"
"game-driver/pkg/utils"
"go.uber.org/zap"
"sync"
"time"
)
func PushCard() leaf.HandlerFunc {
device, err := card_device.New("gpiochip0")
if err != nil {
zap.S().Panicln("初始化发卡器失败: ", err)
}
go func() {
<-utils.GlobalMqttClient.Done()
device.Close()
}()
return func(c *leaf.Context) {
payload := leaf.Value[*schema.PlayModal](c, middleware.PayloadJSONKey)
var action time.Duration
if a, ok := payload.Game["action"]; ok {
action = time.Duration(a.(float64))
}
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
// 结束信号通道
a := make(chan struct{})
// 发送结束信号
defer close(a)
wait.Add(1)
go func() {
defer wait.Done()
select {
case <-a:
case <-time.After(action * time.Second):
device.PushCard()
}
}()
// 执行等待信号
Default(c)
}
}