Пример #1
0
        public void ChannelEnterReq(GameSession session, ChannelEnterReqMessage message)
        {
            if (session.Player.Room != null)
            {
                return;
            }

            if (session.ConnectDate.Add(TimeSpan.FromMinutes(5)) >
                DateTimeOffset.Now)
            {
                session.ConnectDate = DateTimeOffset.Now;
                session.Player.BE.EnableBE();
            }

            var channel = GameServer.Instance.ChannelManager[message.Channel];

            if (channel == null)
            {
                session.SendAsync(new ServerResultAckMessage(ServerResult.NonExistingChannel));
                return;
            }

            session.Player.Channel?.Leave(session.Player);
            try
            {
                channel.Join(session.Player);
                return;
            }
            catch (ChannelLimitReachedException)
            {
                // Fix current client bug
                session.SendAsync(new ServerResultAckMessage(ServerResult.ChannelLeave));
                session.SendAsync(new ServerResultAckMessage(ServerResult.ChannelLimitReached));
            }
            catch (ChannelLevelLimitException)
            {
                // Fix current client bug
                session.SendAsync(new ServerResultAckMessage(ServerResult.ChannelLeave));
                session.SendAsync(new ServerResultAckMessage(ServerResult.JoinChannelFailed));
            }
            catch (ChannelException)
            {
                // Fix current client bug
                session.SendAsync(new ServerResultAckMessage(ServerResult.ChannelLeave));
                session.SendAsync(new ServerResultAckMessage(ServerResult.JoinChannelFailed));
            }
        }
        public void CChannelEnterReq(GameSession session, ChannelEnterReqMessage message)
        {
            var channel = GameServer.Instance.ChannelManager[message.Channel];

            if (channel == null)
            {
                session.SendAsync(new ServerResultAckMessage(ServerResult.NonExistingChannel));
                return;
            }

            session.Player.Channel?.Leave(session.Player, true);
            try
            {
                channel.Join(session.Player);
            }
            catch (ChannelLimitReachedException)
            {
                session.SendAsync(new ServerResultAckMessage(ServerResult.ChannelLimitReached));
            }
        }