Пример #1
0
        /// <summary>
        /// 验证Session是否绑定了玩家
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public static bool SignSession(Session session)
        {
            SessionUserComponent sessionUser = session.GetComponent <SessionUserComponent>();

            if (sessionUser == null || Game.Scene.GetComponent <UserComponent>().Get(sessionUser.User.UserID) == null)
            {
                return(false);
            }
            return(true);
        }
Пример #2
0
        /// <summary>
        /// 验证session是否合法
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public static bool SingSession(Session session)
        {
            SessionUserComponent sessionUseer = session.GetComponent <SessionUserComponent>();

            if (sessionUseer == null || Game.Scene.GetComponent <PlayerManagerComponent>().Get(sessionUseer.userInfo.Id) == null)
            {
                return(false);
            }

            return(true);
        }
Пример #3
0
        /// <summary>
        /// 验证Session是否合法
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public static User GetUserBySession(Session session)
        {
            SessionUserComponent sessionUser = session.GetComponent <SessionUserComponent>();

            if (sessionUser == null)
            {
                return(null);
            }
            User user = Game.Scene.GetComponent <UserComponent>().Get(sessionUser.User.UserID);

            return(user);
        }
Пример #4
0
        public async void Dispatch(Session session, ushort opcode, object message)
        {
            try
            {
                SessionHeartbeatComponent sessionHeartbeatComponent = session.GetComponent <SessionHeartbeatComponent>();
                SessionUserComponent      sessionUserComponent      = session.GetComponent <SessionUserComponent>();
                if (sessionHeartbeatComponent == null)
                {
                    session.Dispose();//心跳组件 没有 直接销毁
                    return;
                }
                sessionHeartbeatComponent.UpReceiveMessageDistance = 0;//重置上次收到消息的时间
                //如果没有挂载SessionUserComponent组件 需要判断一下是不是登陆消息
                if (sessionUserComponent == null)
                {
                    if (message.GetType() != typeof(C2G_GateLogin) && message.GetType() != typeof(C2R_CommonLogin))
                    {
                        session.Dispose();            //发其他 消息 却没有 SessionUserComponent 组件 绝对不走正常
                        return;
                    }
                }
                //如果收到 一秒收到的消息 大于规定的消息 就认定是DOSS攻击 直接销毁
                if (++sessionHeartbeatComponent.SecondTotalMessageNum >=
                    SessionHeartbeatComponent.DestroySeesiontSecondTotalNum)
                {
                    //断开连接
                    sessionHeartbeatComponent.DisposeSession();
                    //直接封号
                    //  UserHelp.StopSealOrRelieve(sessionUserComponent.UserId,true,"DOSS攻击封号"); //不要封号容易误封
                    return;
                }
                switch (message)
                {
                case IActorMessage irActorMessage:
                {
                    long sessionActorId = sessionUserComponent.GamerSessionActorId;
                    if (sessionActorId == 0)
                    {
                        return;
                    }
                    ActorMessageSender actorLocationSender = Game.Scene.GetComponent <ActorMessageSenderComponent>().Get(sessionActorId);
                    actorLocationSender.Send(irActorMessage);
                    return;
                }

                case IUserRequest iUserRequest:
                {
                    if (iUserRequest is IUserActorRequest userActorRequest)
                    {
                        userActorRequest.SessionActorId = session.Id;
                        userActorRequest.User           = sessionUserComponent.user;
                    }
                    if (iUserRequest is IAdministratorRequest administratorRequest)
                    {
                        if (!AdministratorHelp.VerifyAdministrator(administratorRequest))
                        {
                            //如果账号密码错误 直接返回 不如直接封号
                            return;
                        }
                    }
                    iUserRequest.UserId = sessionUserComponent.UserId;
                    AppType   appType       = (AppType)(1 << ((opcode - 10000) / 1000));
                    Session   serverSession = Game.Scene.GetComponent <NetInnerSessionComponent>().Get(appType);
                    int       rpcId         = iUserRequest.RpcId; // 这里要保存客户端的rpcId
                    IResponse response      = await serverSession.Call(iUserRequest);

                    response.RpcId = rpcId;
                    session.Reply(response);
                    return;
                }

                case C2G_Heartbeat c2GHeartbeat:
                    return;
                }
                Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, new MessageInfo(opcode, message));
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }