private void ProcessReconcilation(object state)
        {
            Instance instance = CreateInstance();

            if (!instance.IsValid)
            {
                return;
            }

            string result = String.Empty;

            try
            {
                result = EgateAPI.egAuthRequest(instance.ID, EgateAPI.ProtocolID, CreateRequest(OperationType.TotalsReconcilation).Append(" 1 1").ToString()).GetString();
            }
            finally
            {
                ReleaseInstance(instance);
            }

            if (!IsValidResult(result))
            {
                OnError(instance);
            }

            _reconcilation = ReconcilationState.Completed;
            OnMessage(String.Format("Результат сверки итогов : {0}", result), false);
        }
        public BankingDevice(byte cashBoxUID)
        {
            _cashBoxUID            = cashBoxUID;
            _keyAcqiured           = false;
            _state                 = EquipmentState.Idle;
            _lastTransactionResult = TransactionResult.Unknown;
            _cancel                = CancelState.None;
            _reconcilation         = ReconcilationState.Idle;

            _timer          = new System.Timers.Timer(100);
            _timer.Elapsed += ProcessTransaction;

            _current = null;
        }
        public BankingDevice(byte cashBoxUID)
        {
            cashBoxUid            = cashBoxUID;
            keyAcqiured           = false;
            state                 = EquipmentState.Idle;
            lastTransactionResult = TransactionResult.Unknown;
            cancel                = CancelState.None;
            reconcilation         = ReconcilationState.Idle;

            timer          = new Timer(100);
            timer.Elapsed += ProcessTransaction;

            current = null;
        }
        public bool EndReconcilation()
        {
            if (_reconcilation != ReconcilationState.Completed)
            {
                return(false);
            }

            _reconcilation = ReconcilationState.Idle;
            OnMessage("Сверка итогов завершена", false);

            _keyAcqiured = false;
            AcquireKey();

            return(true);
        }
        public bool BeginReconcilation()
        {
            if (!Ready)
            {
                OnMessage("Оборудование не готово", true);
                return(false);
            }

            if ((_state != EquipmentState.Idle) || (_reconcilation != ReconcilationState.Idle))
            {
                return(false);
            }

            if (!ThreadPool.QueueUserWorkItem(ProcessReconcilation))
            {
                return(false);
            }

            _reconcilation = ReconcilationState.Started;
            OnMessage("Сверка итогов начинается", false);

            return(true);
        }