Пример #1
0
 public static void SendSessionClientActor(this User user, IActorMessage message)
 {
     if (user.GetComponent <UserGateActorIdComponent>() != null)
     {
         long actorId = user.GetComponent <UserGateActorIdComponent>().ActorId;
         ActorHelp.SendActor(actorId, message);
     }
 }
Пример #2
0
 //投票超时处理
 public static void RoomVoteOverTime(this MatchRoom matchRoom)
 {
     //超时默认结果为同意
     matchRoom.VoteDissolveResult.Result = VoteResultType.Consent;
     //广播投票的消息
     matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult);
     //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的
     ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve());
 }
 //判断用户在不在游戏 如果在 就通知客户端玩家在游戏中
 public static bool JudgeUserIsGameIn(this MatchRoomComponent matchRoomComponent, long userId, long userSessionActorId)
 {
     if (matchRoomComponent.UserIdInRoomIdDic.ContainsKey(userId))
     {
         ActorHelp.SendeActor(userSessionActorId, new Actor_BeingInGame()
         {
             IsGameBeing = true
         });                                                                                      //通知客户端 用户在游戏中
         return(true);
     }
     return(false);
 }
Пример #4
0
 public static bool IsUserInGame(this MatchRoomComponent matchRoomCom, long userId, long sessionActorId)
 {
     if (matchRoomCom.UserIdInRoomDic.ContainsKey(userId))
     {
         ActorHelp.SendActor(sessionActorId, new Actor_BeingInGame()
         {
             IsGameBeing = true
         });
         return(true);
     }
     return(false);
 }
Пример #5
0
        //玩家投票解散房间
        public static void PlayerVoteDissolveRoom(this MatchRoom matchRoom, long userId, bool isConsent)
        {
            if (!matchRoom.IsVoteDissolveIn)//不是投票中收到投票消息 不予理会
            {
                return;
            }
            VoteInfo voteInfo = new VoteInfo();

            voteInfo.UserId    = userId;
            voteInfo.IsConsent = isConsent;
            matchRoom.VoteDissolveResult.VoteInfos.Add(voteInfo);
            matchRoom.VoteDissolveResult.Result = VoteResultType.BeingVote;
            if (!isConsent)
            {
                //一个人不同意 直接不解散
                matchRoom.VoteDissolveResult.Result = VoteResultType.NoConsent;
            }
            else
            {
                //检测是否所有人都同意
                if (matchRoom.VoteDissolveResult.VoteInfos.Count == matchRoom.PlayerInfoDic.Count)
                {
                    matchRoom.VoteDissolveResult.Result = VoteResultType.Consent;
                }
            }
            //广播投票的消息
            matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult);
            if (matchRoom.VoteDissolveResult.Result != VoteResultType.BeingVote)//如果结论不是投票中 就表示已经投票结束
            {
                if (MatchRoomComponent.Ins.VoteInRooms.Contains(matchRoom))
                {
                    MatchRoomComponent.Ins.VoteInRooms.Remove(matchRoom);//把自己房间 从投票超时房间里面移除
                }
                if (matchRoom.VoteDissolveResult.Result == VoteResultType.NoConsent)
                {
                    //让游戏服的房间开始游戏
                    ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_PauseRoomGame()
                    {
                        IsPause = false
                    });
                }
                else if (matchRoom.VoteDissolveResult.Result == VoteResultType.Consent)
                {
                    //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的
                    ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve());
                }
                matchRoom.IsVoteDissolveIn   = false; //改变投票状态
                matchRoom.VoteDissolveResult = null;  //清空投票信息
            }
        }
Пример #6
0
        public static void Broadcast(IActorMessage message)
        {
            Unit[] units = Game.Scene.GetComponent <UnitComponent>().GetAll();
            ActorMessageSenderComponent actorLocationSenderComponent = Game.Scene.GetComponent <ActorMessageSenderComponent>();

            foreach (Unit unit in units)
            {
                UnitGateComponent unitGateComponent = unit.GetComponent <UnitGateComponent>();
                if (unitGateComponent.IsDisconnect)
                {
                    continue;
                }
                ActorHelp.SendeActor(unitGateComponent.GateSessionActorId, message);
            }
        }
Пример #7
0
 //进入投票状态
 public static void RommEnterVoteDissolve(this MatchRoom matchRoom, long userId)
 {
     if (matchRoom.IsVoteDissolveIn)
     {
         return;                                                     //已经在投票状态 无法再次投票
     }
     matchRoom.IsVoteDissolveIn = true;                              //状态改为投票中
     matchRoom.VoteTimeResidue  = FiveStarOverTime.DissolveOverTime; //更改投票 超时剩余时间
     MatchRoomComponent.Ins.VoteInRooms.Add(matchRoom);              //把自己房间 加入到 投票超时房间里面
     //让游戏服的房间暂停游戏
     ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_PauseRoomGame()
     {
         IsPause = true
     });
     matchRoom.VoteDissolveResult = new Actor_VoteDissolveRoomResult(); //new 出发送个客户端的投票结果
     matchRoom.VoteDissolveResult.SponsorUserId = userId;               //记录发起人的UserId
     matchRoom.PlayerVoteDissolveRoom(userId, true);                    //发起投票解散房间
 }
        //玩家下线事件
        public static void UserOffline(this GateUserComponent gateUserComponent, long userId)
        {
            long gamerSeesionActorId = 0;

            if (gateUserComponent.mUserDic.ContainsKey(userId))
            {
                gamerSeesionActorId = gateUserComponent.mUserDic[userId].GetUserClientSession().GetComponent <SessionUserComponent>().GamerSessionActorId;
            }
            if (gamerSeesionActorId != 0)
            {
                ActorHelp.SendeActor(gamerSeesionActorId, new Actor_UserOffLine());//告诉游戏服 用户下线
            }
            if (gateUserComponent.mUserDic.ContainsKey(userId))
            {
                gateUserComponent.mUserDic.Remove(userId);
            }
            //给其他服务器广播玩家下线消息
            gateUserComponent.BroadcastOnAndOffLineMessage(new G2S_UserOffline()
            {
                UserId = userId
            });
        }
        protected override void Run(Session session, C2M_GetReconnectionRoomInfo message, Action <M2C_GetReconnectionRoomInfo> reply)
        {
            M2C_GetReconnectionRoomInfo response = new M2C_GetReconnectionRoomInfo();

            try
            {
                MatchRoom matchRoom = MatchRoomComponent.Ins.GetRoomUserIdIn(message.UserId);
                if (matchRoom == null)
                {
                    response.IsGameBeing = false;
                    response.Message     = "房间已经结算";
                    reply(response);
                    return;
                }
                response.IsGameBeing = true;
                if (matchRoom.IsGameBeing)
                {
                    Actor_UserRequestReconnectionRoom m2SUserRequest = new Actor_UserRequestReconnectionRoom();
                    m2SUserRequest.UserId      = message.UserId;
                    m2SUserRequest.UserActorId = matchRoom.GetPlayerInfo(message.UserId).SessionActorId;
                    ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, m2SUserRequest);
                    if (matchRoom.IsVoteDissolveIn)//如果正在投票解散中 补发一条投票结果消息
                    {
                        ActorHelp.SendeActor(m2SUserRequest.UserActorId, matchRoom.VoteDissolveResult);
                    }
                }
                else
                {
                    response.RoomInfos = RoomInfoFactory.Creator(matchRoom);
                }
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }