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) } }