Esempio n. 1
0
        /// <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();
            }
        }
Esempio n. 2
0
        /// <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();
            }
        }