待机功能基本实现

This commit is contained in:
2024-11-06 15:44:35 +08:00
parent 8e2bf7f59b
commit ab0678aa3b
14 changed files with 317 additions and 151 deletions

View File

@@ -1,19 +1,51 @@
package middleware
import (
"game-driver/internal/common"
"game-driver/internal/schema"
"game-driver/leaf"
"game-driver/pkg/audio"
"github.com/gopxl/beep/v2/speaker"
"log"
"sync"
)
func PlayBgm() leaf.HandlerFunc {
return func(c *leaf.Context) {
pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey)
bgm := common.LinkAudio(pm.BGM)
bgm := audio.LinkAudio(pm.BGM)
if bgm != nil {
go audio.PlayMP3(c, bgm)
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
// 结束信号通道
a := make(chan struct{})
// 发送结束信号
defer close(a)
go func() {
// 等待结束
wait.Add(1)
defer wait.Done()
ctrl, closer := audio.PlayBgmMP3(bgm)
defer closer()
if ctrl == nil {
log.Println("播放背景音乐失败")
return
}
select {
case <-a:
{
speaker.Lock()
ctrl.Streamer = nil
speaker.Unlock()
return
}
}
}()
}
c.Next()