Esempio n. 1
0
        public async Task CGameRoomEnterReq(GameSession session, CGameRoomEnterReqMessage message)
        {
            Logger.Debug(JsonConvert.SerializeObject(message, Formatting.Indented));

            var plr  = session.Player;
            var room = plr.Channel.RoomManager[message.RoomId];

            if (room == null)
            {
                Logger.Error()
                .Account(plr)
                .Message($"Room {message.RoomId} in channel {plr.Channel.Id} not found")
                .Write();
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom))
                .ConfigureAwait(false);

                return;
            }
            if (room.IsChangingRules)
            {
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.RoomChangingRules))
                .ConfigureAwait(false);

                return;
            }


            if (!room.Options.Password.Equals(message.Password))
            {
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.PasswordError))
                .ConfigureAwait(false);

                return;
            }


            try
            {
                room.Join(plr);
            }
            catch (RoomAccessDeniedException)
            {
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom))
                .ConfigureAwait(false);
            }
            catch (RoomLimitReachedException)
            {
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom))
                .ConfigureAwait(false);
            }
            catch (RoomException)
            {
                await session.SendAsync(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom))
                .ConfigureAwait(false);
            }
        }
Esempio n. 2
0
        public void CGameRoomEnterReq(GameSession session, CGameRoomEnterReqMessage message)
        {
            var plr  = session.Player;
            var room = plr.Channel.RoomManager[message.RoomId];

            if (room == null)
            {
                Logger.ForAccount(plr)
                .Error("Room {roomId} in channel {channelId} not found", message.RoomId, plr.Channel.Id);
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom));
                return;
            }

            if (room.IsChangingRules)
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.RoomChangingRules));
                return;
            }

            if (!string.IsNullOrEmpty(room.Options.Password) && !room.Options.Password.Equals(message.Password))
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.PasswordError));
                return;
            }

            try
            {
                room.Join(plr);
            }
            catch (RoomAccessDeniedException)
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom));
            }
            catch (RoomLimitReachedException)
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom));
            }
            catch (RoomException)
            {
                session.SendAsync(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom));
            }
        }
Esempio n. 3
0
        public async Task <bool> OnHandle(MessageContext context, CGameRoomEnterReqMessage message)
        {
            var session = context.GetSession <Session>();
            var plr     = session.Player;
            var channel = plr.Channel;
            var roomMgr = channel.RoomManager;
            var room    = roomMgr[message.RoomId];

            if (room == null)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom));
                session.Send(new SDisposeGameRoomAckMessage(message.RoomId));
                return(true);
            }

            if (!string.IsNullOrWhiteSpace(room.Options.Password) &&
                !room.Options.Password.Equals(message.Password) &&
                !plr.IsInGMMode)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.PasswordError));
                return(true);
            }

            var error = room.Join(plr);

            switch (error)
            {
            case RoomJoinError.AlreadyInRoom:
            case RoomJoinError.RoomFull:
            case RoomJoinError.KickedPreviously:
            case RoomJoinError.NoIntrusion:
                session.Send(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom));
                break;

            case RoomJoinError.ChangingRules:
                session.Send(new SServerResultInfoAckMessage(ServerResult.RoomChangingRules));
                break;
            }

            return(true);
        }
Esempio n. 4
0
        public void CGameRoomEnterReq(GameSession session, CGameRoomEnterReqMessage message)
        {
            _logger.Debug()
            .Message(JsonConvert.SerializeObject(message, Formatting.Indented))
            .Write();

            var plr  = session.Player;
            var room = plr.Channel.RoomManager[message.RoomId];

            if (room == null)
            {
                _logger.Error()
                .Account(plr)
                .Message($"Room {message.RoomId} in channel {plr.Channel.Id} not found")
                .Write();
                session.Send(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom));
                return;
            }
            if (room.IsChangingRules)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.RoomChangingRules));
                return;
            }

            try
            {
                room.Join(plr);
            }
            catch (RoomLimitReachedException)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.CantEnterRoom));
            }
            catch (RoomException)
            {
                session.Send(new SServerResultInfoAckMessage(ServerResult.ImpossibleToEnterRoom));
            }
        }