private void AcquireKey() { if (Ready) { return; } Instance instance = null; try { instance = CreateInstance(); string result = EgateAPI.egAuthRequest(instance.Id, EgateAPI.ProtocolId, CreateRequest(OperationType.RequestWorkKey).ToString()).GetString(); if (!IsValidResult(result)) { OnError(instance); return; } OnMessage(String.Format("Ответ на запрос ключа : {0}", result), false); result = EgateAPI.egGetAuthResult(instance.Id).GetString(); if (!IsValidResult(result)) { OnError(instance); return; } AuthResponse response = null; try { response = AuthResponse.Parse(result, null); } catch (Exception x) { OnMessage(x.Message, true); } if ((response == null) || !AuthResponse.IsValidCode(response.GCSCode)) { return; } keyAcqiured = true; OnMessage(String.Format("Ключ получен успешно : {0}", response), false); } finally { ReleaseInstance(instance); } }
private void ProcessTransaction(object sender, ElapsedEventArgs e) { string status = EgateAPI.egGetOpStatus(current.Id, false).GetString(); if (status[0] == EgateAPI.StatusResult) { timer.Stop(); OnMessage(String.Format("Запрос обработан : {0}", status.Substring(1)), false); AuthResponse response = null; try { byte[] ba; string result = EgateAPI.egGetAuthResult(current.Id).GetString(out ba); if (IsValidResult(result)) { lastTransactionResult = (cancel == CancelState.Completed) ? TransactionResult.Cancelled : TransactionResult.OK; } else { lastTransactionResult = TransactionResult.Error; OnError(current); } response = AuthResponse.Parse(result, ba); } catch (Exception x) { OnMessage(x.Message, true); } finally { OnTransactionCompleted(lastTransactionResult, response); state = EquipmentState.CardTaken; OnStateChanged(state, status.Substring(1)); } } else if (status[0] == EgateAPI.StatusBusy) { EquipmentState s = state; switch (status[1]) { case EgateAPI.StatusWaitCard: //if (_state == EquipmentState.Started) s = EquipmentState.WaitingForCard; break; case EgateAPI.StatusCardEntered: //if (_state == EquipmentState.WaitingForCard) s = EquipmentState.CardInserted; break; case EgateAPI.StatusPinEntered: if (state == EquipmentState.CardInserted) { s = EquipmentState.PinEntered; } break; case EgateAPI.StatusAuthCompleted: if ((state != EquipmentState.Started) && (state != EquipmentState.WaitingForCard)) { s = EquipmentState.AuthCompleted; } break; default: s = state; break; } if (state == s) { return; } state = s; OnStateChanged(state, status.Substring(2)); } }