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); } }
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)); } }
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); }
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)); } }