package middleware import ( "game-driver/internal/schema" "game-driver/leaf" "game-driver/pkg/tts" "sync" "time" ) func TickerAction() leaf.HandlerFunc { return func(c *leaf.Context) { pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey) // 构建打印和语音播报的时间映射 printMap := make(map[int]schema.PrintModal, len(pm.Print)) for _, p := range pm.Print { printMap[p.Time] = p } ttsMap := make(map[int]schema.TTSTimer, len(pm.TTS.Timer)) for _, t := range pm.TTS.Timer { ttsMap[t.Time] = t } // 等待组 var wait sync.WaitGroup defer wait.Wait() // 结束信号通道 a := make(chan struct{}) // 发送结束信号 defer close(a) go func() { start := time.Now() // 等待结束 wait.Add(1) defer wait.Done() // 定时器 ticker := time.NewTicker(time.Second) defer ticker.Stop() for over := false; !over; { select { case <-a: over = true case m := <-ticker.C: { s := int(m.Sub(start).Seconds()) if _, ok := printMap[s]; ok { //TODO: 屏幕打印 } if to, ok := ttsMap[s]; ok { tts.DefaultTTS.Sound(to.Value) } } } } }() c.Next() } }