public bool IsAccessGranted(TurnstileDirection direction, string idData, out string reason)
        {
            // причина отказа
            reason = "Доступ разрешен";

            try
            {
                // запрос client_info, получаем номер карты
                string cardNo = GetCardNo(idData);

                // запрос info, проверяем состояние счета
                if (!CheckBalance(cardNo, _settings.MinBalance))
                {
                    throw new InvalidOperationException("Недостаточно средств на счете клиента");
                }

                // запрос registration, регистрируем посещение
                if (_settings.RegisterVisit)
                {
                    RegisterVisit(cardNo, _settings.PointId, _settings.TerminalNo);
                }

                return(true);
            }
            catch (WebException E)
            {
                reason = E.Message;
                return(false);
            }
            catch (InvalidOperationException E)
            {
                reason = E.Message;
                return(false);
            }
        }
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 protected CustomTurnstileDevice()
     : base()
 {
     _direction  = TurnstileDirection.Entry;
     _syncObject = new object();
     _timeout    = 15;
 }
        public bool IsAccessGranted(TurnstileDirection direction, string idData,
                                    out string reason)
        {
            // причина отказа
            reason = "Доступ разрешен";

            // формируем HTTP-запрос к ПДС
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(
                                                                           "http://{0}:{1}/", _settings.HostOrIp, _settings.Port));

            request.Method = "POST";
            using (Stream requestStream = request.GetRequestStream())
            {
                GetRequest(idData, requestStream);
            }

            try
            {
                // запрашиваем информацию по карте
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        // читаем ответ
                        int balance = GetBalance(responseStream, idData);

                        // пропускаем на выход только с неотрицательным балансом
                        bool accessGranted = (direction == TurnstileDirection.Entry) ||
                                             (direction == TurnstileDirection.Exit && balance >= 0);
                        if (!accessGranted)
                        {
                            reason = "Отрицательный баланс счета";
                        }

                        return(accessGranted);
                    }
                }
            }
            catch (WebException e)
            {
                reason = e.Message;
                return(false);
            }
            catch (InvalidOperationException e)
            {
                reason = e.Message;
                return(false);
            }
        }
 public void OnAccessOccured(TurnstileDirection direction, string idData)
 {
 }