44 lines
748 B
Go
44 lines
748 B
Go
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()
|
|
time.Sleep(3 * time.Second)
|
|
a <- "卡片数据"
|
|
}()
|
|
|
|
select {
|
|
case <-c.Done():
|
|
case <-time.After(waitCard * time.Second):
|
|
case _, ok := <-a: // 等待卡片插入
|
|
if ok { // 非关闭信号
|
|
Default(c)
|
|
}
|
|
}
|
|
}
|