protected override void Run(FiveStarRoom fiveStarRoom, Actor_UserRequestReconnectionRoom message) { try { FiveStarPlayer fiveStarPlayer = fiveStarRoom.GetPlayerInfoUserIdIn(message.UserId); if (fiveStarPlayer == null) { Log.Error("请求重连数据" + message.UserId + "不在房间中"); return; } fiveStarPlayer.User.IsOnLine = true; //状态改为在线 fiveStarPlayer.SetCollocation(false); //取消托管 if (fiveStarPlayer.FiveStarRoom.CurrRoomStateType == RoomStateType.ReadyIn) { fiveStarPlayer.Ready(); //如果未准备的状态上线 直接改变状态为准备 } Actor_FiveStar_Reconnection actorFiveStarReconnection = ReconnectionRoomDataFactory.Create(fiveStarRoom, message.UserId); fiveStarPlayer.User.GetComponent <UserGateActorIdComponent>().ActorId = message.UserActorId; fiveStarPlayer.SendGateStartGame(); //通知用户所在的网关服开始游戏 就是把 游戏服的对象id发过去 fiveStarPlayer.SendMessageUser(actorFiveStarReconnection); //发送重连数据 //补发最后一条可操作消息 if (fiveStarRoom.EndCanOperateAndCanChuMessage != null) { fiveStarPlayer.SendMessageUser(fiveStarRoom.EndCanOperateAndCanChuMessage); } ReconnectionRoomDataFactory.Dispose(actorFiveStarReconnection); } catch (Exception e) { Log.Error(e); throw; } }
public static void Dispose(Actor_FiveStar_Reconnection actorFiveStarReconnection) { for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++) { FiveStarPlayerFactory.DisposeSerializePlayer(actorFiveStarReconnection.Players[i]); } }
//重连进入游戏 public static void Reconnection(Actor_FiveStar_Reconnection roomData) { Game.Scene.GetComponent <ToyGameComponent>().StartGame(ToyGameId.CardFiveStar, roomData.Configs, roomData.RoomId, roomData.RoomType); CardFiveStarRoom.Ins._RoomState = roomData.CurrRoomStateType; //状态改为等待中 CardFiveStarRoom.Ins._FriendsCircleId = roomData.FriendsCircleId; //更改亲友圈id if (roomData.ResidueCardCount > 0) { CardFiveStarRoom.Ins._ResideNum = roomData.ResidueCardCount; //剩余牌数赋值 } CardFiveStarRoom.Ins.iEndChuCardSize = roomData.EndPlayCardSize; //出牌的最后一张牌 CardFiveStarRoom.Ins._CuurRoomOffice = roomData.CurrOfficNum; //当前局数赋值 CardFiveStarRoom.Ins._RoomId = roomData.RoomId; //roomId赋值 EventMsgMgr.SendEvent(CardFiveStarEventID.HideAllPlayer); //先隐藏所有玩家 CardFiveStarRoom.Ins.ShowPlayerInfo(roomData.Players); //显示服务器发过来的玩家信息 UIComponent.GetUiView <CardFiveStarRoomPanelComponent>().SetResidueNum(CardFiveStarRoom.Ins._ResideNum); //设置剩余牌数 CardFiveStarRoom.Ins.SetUserPlayerAsLastSibling(); //设置自己的节点到最后 if (CardFiveStarRoom.Ins._config.RoomNumber == 4) //四人房还有玩家轮休 { CardFiveStarRoom.Ins.PlayerRest(roomData.CurrRestSeatIndex); //当前休息玩家索引 } for (int i = 0; i < roomData.Players.Count; i++) { CardFiveStarRoom.Ins._ServerSeatIndexInPlayer[roomData.Players[i].SeatIndex].Reconnection(roomData.Players[i], roomData.CurrRoomStateType, roomData.IsDaPiaoBeing);//显示玩家对应的信息 } if (roomData.CurrRoomStateType == RoomStateType.ReadyIn) { UIComponent.GetUiView <CardFiveStarRoomPanelComponent>().CutReadyInUI();//UI切换为准备中的状态 } else { UIComponent.GetUiView <CardFiveStarRoomPanelComponent>().CutGameInUI();//UI切换为游戏中的状态 } }
public static Actor_FiveStar_Reconnection Create(FiveStarRoom fiveStarRoom, long reconnectionUserId) { Actor_FiveStar_Reconnection actorFiveStarReconnection = new Actor_FiveStar_Reconnection(); for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++) { actorFiveStarReconnection.Players.Add(FiveStarPlayerFactory.CopySerialize(fiveStarRoom.FiveStarPlayerDic[i])); } actorFiveStarReconnection.RoomId = fiveStarRoom.RoomId; if (fiveStarRoom.RoomType == RoomType.Match) { actorFiveStarReconnection.RoomId = fiveStarRoom.MathRoomId; } actorFiveStarReconnection.FriendsCircleId = fiveStarRoom.FriendsCircleId; actorFiveStarReconnection.RoomType = fiveStarRoom.RoomType; actorFiveStarReconnection.Configs = fiveStarRoom.RoomConfig.Configs; actorFiveStarReconnection.CurrRestSeatIndex = fiveStarRoom.CurrRestSeatIndex; actorFiveStarReconnection.CurrRoomStateType = fiveStarRoom.CurrRoomStateType; actorFiveStarReconnection.CurrOfficNum = fiveStarRoom.CurrOfficNum; if (fiveStarRoom.ResidueCards != null) { actorFiveStarReconnection.ResidueCardCount = fiveStarRoom.ResidueCards.Count; } actorFiveStarReconnection.IsDaPiaoBeing = fiveStarRoom.IsDaPiaoBeing; actorFiveStarReconnection.EndPlayCardSize = fiveStarRoom.CurrChuPaiCard;//最后出第一张牌 就是当前出的牌 for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++) { if (reconnectionUserId == actorFiveStarReconnection.Players[i].User.UserId || actorFiveStarReconnection.Players[i].IsLiangDao) { continue; } if (actorFiveStarReconnection.Players[i].Hands == null) { continue; } fiveStarRoom.intData = actorFiveStarReconnection.Players[i].Hands.Count; actorFiveStarReconnection.Players[i].Hands = new RepeatedField <int>(); actorFiveStarReconnection.Players[i].Hands.Add(fiveStarRoom.intData);//不是自己本人 也没有亮倒的手牌信息 只能得到数量 } return(actorFiveStarReconnection); }