예제 #1
0
        public void CChannelEnterReq(GameSession session, CChannelEnterReqMessage message)
        {
            var channel = GameServer.Instance.ChannelManager[message.Channel];

            if (channel == null)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.NonExistingChannel));
                return;
            }

            try
            {
                channel.Join(session.Player);
            }
            catch (ChannelLimitReachedException)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.ChannelLimitReached));
            }
            catch (ChannelException ex)
            {
                _logger.Error()
                .Account(session)
                .Exception(ex)
                .Write();
                session.Send(new SServerResultInfoAckMessage(ServerResult.JoinChannelFailed));
            }
        }
예제 #2
0
        public async Task <bool> OnHandle(MessageContext context, CChannelEnterReqMessage message)
        {
            var session = context.GetSession <Session>();
            var plr     = session.Player;

            var channel = _channelService[message.Channel];

            if (channel == null)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.NonExistingChannel));
                return(true);
            }

            var result = channel.Join(plr);

            switch (result)
            {
            case ChannelJoinError.OK:
                plr.Session.Send(new SServerResultInfoAckMessage(ServerResult.ChannelEnter));
                break;

            case ChannelJoinError.AlreadyInChannel:
                plr.Session.Send(new SServerResultInfoAckMessage(ServerResult.JoinChannelFailed));
                break;

            case ChannelJoinError.ChannelFull:
                plr.Session.Send(new SServerResultInfoAckMessage(ServerResult.ChannelLimitReached));
                break;
            }

            return(true);
        }
예제 #3
0
        public void CChannelEnterReq(GameSession session, CChannelEnterReqMessage message)
        {
            var channel = GameServer.Instance.ChannelManager[message.Channel];

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

            try
            {
                channel.Join(session.Player);
            }
            catch (ChannelLimitReachedException)
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.ChannelLimitReached));
            }
        }