fix: 修复牌型识别、获胜显示、出牌区布局、移动端重连
1. 牌型识别: 新增三带一对、飞机、飞机带单/带对、四带二、四带两对 2. 获胜显示: 先显示最后出牌1秒后再弹出获胜对话框 3. 出牌区布局: 横向排列并换行 4. 移动端重连: 切回前台时自动重连WebSocket 5. 更新文档: README.md和API.md补充新增牌型
This commit is contained in:
@@ -185,6 +185,7 @@ func (c *Client) handleMessage(data []byte) {
|
||||
}
|
||||
room, _ := c.Hub.GameMgr.GetRoom(c.RoomID)
|
||||
if room != nil && room.State == models.RoomStateFinished {
|
||||
c.Hub.broadcastFinalState(c.RoomID, room)
|
||||
c.Hub.broadcastToRoom(c.RoomID, models.Message{
|
||||
Type: models.MsgTypeGameOver,
|
||||
Data: map[string]string{"winnerId": room.LastWinner},
|
||||
@@ -313,6 +314,34 @@ func (h *Hub) broadcastRoomState(roomID string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) broadcastFinalState(roomID string, room *models.Room) {
|
||||
h.mu.RLock()
|
||||
clients := make([]*Client, 0)
|
||||
for _, c := range h.Clients {
|
||||
if c.RoomID == roomID {
|
||||
clients = append(clients, c)
|
||||
}
|
||||
}
|
||||
h.mu.RUnlock()
|
||||
|
||||
for _, c := range clients {
|
||||
state := h.GameMgr.GetRoomState(roomID, c.ID)
|
||||
if state != nil {
|
||||
state.State = models.RoomStatePlaying
|
||||
data, _ := json.Marshal(models.Message{
|
||||
Type: models.MsgTypeState,
|
||||
Data: state,
|
||||
Timestamp: time.Now().Unix(),
|
||||
})
|
||||
select {
|
||||
case c.Send <- data:
|
||||
case <-c.done:
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) BroadcastRoomLeft(roomID, playerID string) {
|
||||
h.mu.RLock()
|
||||
clients := make([]*Client, 0)
|
||||
|
||||
Reference in New Issue
Block a user