Procházet zdrojové kódy

recover closed chan

tl před 2 roky
rodič
revize
a32499ae7a
1 změnil soubory, kde provedl 15 přidání a 21 odebrání
  1. 15 21
      game/qznn/qznn.go

+ 15 - 21
game/qznn/qznn.go

@@ -870,6 +870,9 @@ func (p *Game) Ready(playerID int32) error {
 	if allReady {
 		p.EventInfo(playerID, "准备", "全部准备好,发送通知")
 		go func() {
+			defer func() {
+				recover()
+			}()
 			roomItem.ReadyCh <- true
 		}()
 	}
@@ -908,32 +911,14 @@ func (p *Game) Ready(playerID int32) error {
 			}
 		}()
 
-		allReady := true
 		p.locker.Lock()
 		{
-			roomItem := p.RoomMap[roomItem.ID]
-			for _, chairItem := range roomItem.ChairList {
-				if chairItem.PlayerID == 0 {
-					continue
-				}
-
-				chairPlayer := p.PlayerMap[chairItem.PlayerID]
-				if chairPlayer.Status != PlayerStatusReady {
-					allReady = false
-					break
-				}
-			}
-		}
-
-		if !allReady {
 			p.EventInfo(playerID, "准备", fmt.Sprintf("等待房间准备:%d", roomItem.ID))
-			p.locker.Unlock()
 
-			p.WaitReady(roomItem)
-		} else {
-			p.EventInfo(playerID, "准备", "全部都是等待状态,无需等待,马上开始")
-			p.locker.Unlock()
 		}
+		p.locker.Unlock()
+
+		p.WaitReady(roomItem)
 
 		func() {
 			//TODO: 优化并发
@@ -1119,6 +1104,9 @@ func (p *Game) ChooseMaster(playerID int32, mul int32) error {
 	//全部选完,就进入下一阶段
 	if allChoose {
 		go func() {
+			defer func() {
+				recover()
+			}()
 			roomItem.ChooseMasterCh <- true
 		}()
 	}
@@ -1192,6 +1180,9 @@ func (p *Game) ChooseMul(playerID int32, mul int32) error {
 	//全部选完,就进入下一阶段
 	if allChoose {
 		go func() {
+			defer func() {
+				recover()
+			}()
 			roomItem.ChooseMulCh <- true
 		}()
 	}
@@ -1249,6 +1240,9 @@ func (p *Game) OpenCard(playerID int32) error {
 	//全部选完,就进入下一阶段
 	if allOpen {
 		go func() {
+			defer func() {
+				recover()
+			}()
 			roomItem.OpenCh <- true
 		}()
 	}