/// <summary> /// Убирает пользователя из игрового стола /// </summary> /// <param name="player"></param> public void Leave(Player player) { if (player == null) { throw new ArgumentNullException(nameof(player)); } try { _joinAndLeaveMutex.WaitOne(); if (IsInvalid) { throw new TrueFalseGameException("Игровой стол находится в инвалидном состоянии"); } PlayPlaces.RemovePlayer(player); if (player.Id == Owner.Id) { Owner = GetNextOwner()?.Player; } } finally { _joinAndLeaveMutex.ReleaseMutex(); } }
/// <summary> /// Присоединяет пользователя к игровому столу /// </summary> /// <param name="player"></param> public void Join(Player player) { if (player == null) { throw new ArgumentNullException(nameof(player)); } try { _joinAndLeaveMutex.WaitOne(); if (IsInvalid) { throw new TrueFalseGameException("Игровой стол находится в инвалидном состоянии"); } if (CurrentGame != null && CurrentGame.IsStarted && !CurrentGame.IsEnded) { throw new TrueFalseGameException("Игра уже началась"); } PlayPlaces.PlantPlayer(player); } finally { _joinAndLeaveMutex.ReleaseMutex(); } }