private static async Task ChangeTable(Gamer gamer) { try { // Log.Info("收到换桌:" + JsonHelper.ToJson(message)); RoomComponent roomComponent = Game.Scene.GetComponent <RoomComponent>(); Room gamerRoom = roomComponent.Get(gamer.RoomID); if (gamerRoom == null || gamerRoom.IsFriendRoom) { return; } if (gamerRoom.State == RoomState.Game) { Log.Warning($"玩家{gamer.UserID}打牌过程中不能换桌"); return; } GameControllerComponent gameControllerComponent = gamerRoom.GetComponent <GameControllerComponent>(); long roomType = gameControllerComponent.RoomConfig.Id; Room idleRoom = null; //获得空闲的房间 foreach (var room in roomComponent.idleRooms.Values) { if (room.Id != gamerRoom?.Id && room.Count < 4) { GameControllerComponent controllerComponent = room.GetComponent <GameControllerComponent>(); if (controllerComponent.RoomConfig.Id == roomType) { idleRoom = room; break; } } } if (idleRoom == null) { idleRoom = RoomFactory.Create((int)roomType); roomComponent.Add(idleRoom); } Log.Info($"收到玩家{gamer.UserID}换桌前:" + gamer.RoomID); //房间移除玩家 gamerRoom?.Remove(gamer.UserID); //房间没人就释放 if (gamerRoom?.seats.Count == 0) { roomComponent.RemoveRoom(gamerRoom); gamerRoom?.Dispose(); } gamer.IsReady = false; gamer.ReadyTimeOut = 0; idleRoom.Add(gamer); await idleRoom.BroadGamerEnter(gamer.UserID); Log.Info($"收到玩家{gamer.UserID}换桌后:" + gamer.RoomID); gamerRoom?.Broadcast(new Actor_GamerExitRoom() { Uid = gamer.UserID }); } catch (Exception e) { Log.Error(e); } await Task.CompletedTask; }