package play import ( "game-driver/internal/middleware" "game-driver/internal/schema" "game-driver/leaf" "sync" "time" ) func WaitCard(c *leaf.Context) { payload := leaf.Value[*schema.PlayModal](c, middleware.PayloadJSONKey) var waitCard time.Duration if a, ok := payload.Game["wait_card"]; ok { if v, ok := a.(float64); ok { waitCard = time.Duration(v) } } // 等待组 var wait sync.WaitGroup defer wait.Wait() a := make(chan string) defer close(a) wait.Add(1) go func() { defer wait.Done() //TODO: 模拟卡片 3s 插入 time.Sleep(3 * time.Second) a <- "卡片数据" }() select { case <-c.Done(): case <-time.After(waitCard * time.Second): case _, ok := <-a: // 等待卡片插入 if ok { // 非关闭信号 Default(c) } } }