private void ValidateReservationState(PlayerSlotReservationState reservationState) { if (reservationState == PlayerSlotReservationState.Reserved) { throw new InvalidReservationRejectionReasonException(); } }
public void HandleRejectedReservation(string correlationId, PlayerSlotReservationState reservationState) { if (CurrentState == ClientBridgeState.Disconnected) { return; } try { if (CurrentState != ClientBridgeState.WaitingForRerservation) { throw new ProhibitedReservationRejectionException(); } ValidateCorrelationId(correlationId); ConfirmCorrelationId(correlationId); ValidateReservationState(reservationState); ReservationKey = null; ReservationState = reservationState; CurrentState = ClientBridgeState.ReservationRejected; } catch (Exception ex) { TryStopClient(); CurrentState = ClientBridgeState.Failed; throw ex; } }
public PlayerSlotReservation ReservePlayerSlot(string correlationId, string playerId) { if (currentPlayerNames.Contains(playerId)) { PlayerSlotReservationState rejectedReservationState = PlayerSlotReservationState.Rejected | PlayerSlotReservationState.UniquePlayerNameConstraintViolated; return(new PlayerSlotReservation(correlationId, rejectedReservationState)); } string reservationKey = Guid.NewGuid().ToString(); PlayerSlotReservation reservation = new PlayerSlotReservation(correlationId, reservationKey, playerId); lock (reservations) { reservations.Add(reservationKey, reservation); } return(reservation); }
public static string Describe(this PlayerSlotReservationState currentState) { StringBuilder descriptionBuilder = new StringBuilder(); foreach (string reservationStateName in Enum.GetNames(typeof(PlayerSlotReservationState))) { PlayerSlotReservationState reservationState = (PlayerSlotReservationState)Enum.Parse(typeof(PlayerSlotReservationState), reservationStateName); if (currentState.HasStateFlag(reservationState)) { DescriptionAttribute descriptionAttribute = reservationState.GetAttribute <DescriptionAttribute>(); if (!string.IsNullOrEmpty(descriptionAttribute?.Description)) { descriptionBuilder.AppendLine(descriptionAttribute.Description); } } } return(descriptionBuilder.ToString()); }
private void RenderUnableToJoinDialog(int windowId) { Event e = Event.current; if (e.isKey) { switch (e.keyCode) { case KeyCode.Return: joiningServer = true; notifyingUnableToJoin = false; break; case KeyCode.Escape: joiningServer = true; notifyingUnableToJoin = false; break; } } GUISkinUtils.RenderWithSkin(GetGUISkin("dialogs.server.rejected", 490), () => { using (new GUILayout.VerticalScope("Box")) { using (new GUILayout.HorizontalScope()) { PlayerSlotReservationState reservationState = Multiplayer.Logic.ClientBridge.ReservationState; string reservationStateDescription = reservationState.Describe(); GUILayout.Label(reservationStateDescription); } if (GUILayout.Button("OK")) { joiningServer = true; notifyingUnableToJoin = false; } } }); }
public static bool HasStateFlag(this PlayerSlotReservationState currentState, PlayerSlotReservationState checkedState) { return((currentState & checkedState) == checkedState); }
public PlayerSlotReservation(string correlationId, PlayerSlotReservationState reservationState) { CorrelationId = correlationId; ReservationState = reservationState; }