package middleware import ( "game-driver/internal/schema" "game-driver/leaf" "game-driver/pkg/audio" "game-driver/pkg/utils" "sync" "go.uber.org/zap" ) // PlayBgm 播放背景音乐 func PlayBgm() leaf.HandlerFunc { return func(c *leaf.Context) { pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey) bgm, err := utils.LinkAudio(pm.BGM) if err != nil { zap.S().Errorln("背景音乐数据解析异常:", err) } if bgm != nil { zap.S().Infoln("背景音乐解析成功") var wait sync.WaitGroup defer wait.Wait() a := make(chan struct{}) defer close(a) wait.Add(1) go func() { defer wait.Done() zap.S().Infoln("开始播放背景音乐") defer zap.S().Infoln("结束背景音乐播放") _, cleanup, err := audio.PlayMP3Loop(bgm) if err != nil { zap.S().Errorln("播放背景音乐异常:", err) return } defer cleanup() <-a }() } else { zap.S().Infoln("未解析到背景音乐") } c.Next() } }