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);
        }