public async Task DisplayControlPanel(ControlPanelType option, ReceiptCutModeType cutMode, ReceiptPrintModeType printMode) { try { await _eft.WriteRequestAsync(new EFTControlPanelRequest() { ControlPanelType = option, ReceiptCutMode = cutMode, ReceiptPrintMode = printMode, ReturnType = ControlPanelReturnType.Immediately }); bool waiting = true; do { var timeoutToken = new CancellationTokenSource(new TimeSpan(0, 5, 0)).Token; // 5 minute timeout var r = await _eft.ReadResponseAsync(timeoutToken); if (r is EFTDisplayResponse) { if (_data.Settings.DemoDialogOption != DemoDialogMode.Hide) { EFTDisplayResponse res = r as EFTDisplayResponse; _data.DisplayDetails = res; _data.DisplayDialog(true); } } else if (r is EFTReceiptResponse || r is EFTReprintReceiptResponse) { string[] receiptText = (r is EFTReceiptResponse) ? (r as EFTReceiptResponse).ReceiptText : (r as EFTReprintReceiptResponse).ReceiptText; StringBuilder receipt = new StringBuilder(); foreach (var s in receiptText) { if (s.Length > 0) { receipt.AppendLine(s); } } if (!string.IsNullOrEmpty(receipt.ToString())) { _data.Receipt = receipt.ToString(); } } else { _data.LastTxnResult = DictionaryFromType(r); _data.DisplayDialog(false); } }while (waiting); } catch (Exception ex) { ShowError(ex.HResult.ToString(), ex.Message); } }
/// <summary>Constructs a default display response object.</summary> public EFTDisplayResponseVM(EFTDisplayResponse m) { NumberOfLines = m.NumberOfLines; LineLength = m.LineLength; DisplayText = m.DisplayText; CancelKeyFlag = m.CancelKeyFlag; AcceptYesKeyFlag = m.AcceptYesKeyFlag; DeclineNoKeyFlag = m.DeclineNoKeyFlag; AuthoriseKeyFlag = m.AuthoriseKeyFlag; OKKeyFlag = m.OKKeyFlag; InputType = m.InputType; GraphicCode = m.GraphicCode; PurchaseAnalysisData = m.PurchaseAnalysisData; }
public Task HandleDisplayResponseAsync(EFTDisplayResponse eftDisplayResponse) { DisplayResponse = eftDisplayResponse; if (eftDialog == null) { eftDialog = new TestDialogUI(); eftDialog.DataContext = this; eftDialog.BtnOK.Click += BtnOK_Click; eftDialog.BtnCancel.Click += BtnCancel_Click; eftDialog.txtResponseLine1.Text = eftDisplayResponse.DisplayText[0]; eftDialog.txtResponseLine2.Text = eftDisplayResponse.DisplayText[1]; eftDialog.Show(); } loadButtons(eftDisplayResponse); if (eftDisplayResponse.InputType != InputType.None) { eftDialog.txtInput.Visibility = System.Windows.Visibility.Visible; } return(Task.FromResult(0)); }
private void loadButtons(EFTDisplayResponse eftDisplayResponse) { #region OKButtons if (eftDisplayResponse.AcceptYesKeyFlag == true) { eftDialog.BtnOK.Content = "Yes"; eftDialog.BtnOK.Visibility = System.Windows.Visibility.Visible; } else if (eftDisplayResponse.AuthoriseKeyFlag == true) { eftDialog.BtnOK.Content = "Authorise"; eftDialog.BtnOK.Visibility = System.Windows.Visibility.Visible; } else if (eftDisplayResponse.OKKeyFlag == true) { eftDialog.BtnOK.Content = "OK"; eftDialog.BtnOK.Visibility = System.Windows.Visibility.Visible; } else { eftDialog.BtnOK.Visibility = System.Windows.Visibility.Collapsed; } #endregion #region CancelButtons if (eftDisplayResponse.CancelKeyFlag == true) { eftDialog.BtnCancel.Content = "Cancel"; eftDialog.BtnCancel.Visibility = System.Windows.Visibility.Visible; } else if (eftDisplayResponse.DeclineNoKeyFlag == true) { eftDialog.BtnCancel.Content = "No"; eftDialog.BtnCancel.Visibility = System.Windows.Visibility.Visible; } else { eftDialog.BtnCancel.Visibility = System.Windows.Visibility.Collapsed; } #endregion }
void OnDisplay(EFTDisplayResponse r) { ShowDialog((r.DisplayText.Length >= 0) ? r.DisplayText[0] : "", (r.DisplayText.Length >= 1) ? r.DisplayText[1] : "", r.OKKeyFlag, r.CancelKeyFlag, r.AcceptYesKeyFlag, r.DeclineNoKeyFlag, r.AuthoriseKeyFlag); }
private async Task <bool> SendRequest <T>(EFTRequest request, bool autoApproveDialogs = false) { bool result = false; if (_requestInProgress) { _data.Log($"Unable to process {request.ToString()}. There is already a request in progress"); return(false); } if (!_eft.IsConnected || _data.ConnectedState == ConnectedStatus.Disconnected) { await _eft.ConnectAsync("127.0.0.1", 2011, false); _data.ConnectedState = ConnectedStatus.Connected; } try { await _eft.WriteRequestAsync(request); _requestInProgress = true; do { var timeoutToken = new CancellationTokenSource(new TimeSpan(0, 5, 0)).Token; // 5 minute timeout if (request.GetType().Equals(typeof(EFTSlaveRequest))) { _requestInProgress = false; } var r = await _eft.ReadResponseAsync(timeoutToken); if (r == null) // stream is busy { _data.Log($"Unable to process {request.ToString()}. Stream is busy."); } else if (r is EFTDisplayResponse) { if (_data.Settings.DemoDialogOption != DemoDialogMode.Hide) { EFTDisplayResponse res = r as EFTDisplayResponse; _data.DisplayDetails = res; _data.DisplayDialog(true); } if (autoApproveDialogs && (r as EFTDisplayResponse).OKKeyFlag) { await _eft.WriteRequestAsync(new EFTSendKeyRequest() { Key = EFTPOSKey.OkCancel }); } } else if (r is EFTReceiptResponse || r is EFTReprintReceiptResponse) { // Hacked in some preprint and print response timeouts. It ain't pretty and it may not work, but it's my code. #region PrintResponse Timeout if (_data.IsPrePrintTimeOut) { if ((r as EFTReceiptResponse).IsPrePrint) { Thread.Sleep(59000); } } else if (_data.IsPrintTimeOut) { if (!(r as EFTReceiptResponse).IsPrePrint) { Thread.Sleep(59000); } } #endregion string[] receiptText = (r is EFTReceiptResponse) ? (r as EFTReceiptResponse).ReceiptText : (r as EFTReprintReceiptResponse).ReceiptText; StringBuilder receipt = new StringBuilder(); foreach (var s in receiptText) { if (s.Length > 0) { receipt.AppendLine(s); } } if (!string.IsNullOrEmpty(receipt.ToString())) { _data.Receipt = receipt.ToString(); } if (request is EFTReceiptRequest || (request is EFTReprintReceiptRequest && request.GetPairedResponseType() == r.GetType())) { _requestInProgress = false; _eft.Dispose(); } } else if (r is EFTQueryCardResponse) { _data.LastTxnResult = DictionaryFromType(r); var x = (EFTQueryCardResponse)r; _data.SelectedTrack2 = x.Track2; _data.DisplayDialog(false); _requestInProgress = false; _eft.Dispose(); } else if (r is EFTClientListResponse) { int index = 1; var x = (EFTClientListResponse)r; Dictionary <string, string> ClientList = new Dictionary <string, string>(); foreach (var clnt in x.EFTClients) { ClientList.Add("Client " + index.ToString() + " " + nameof(clnt.Name), clnt.Name); ClientList.Add("Client " + index.ToString() + " " + nameof(clnt.IPAddress), clnt.IPAddress); ClientList.Add("Client " + index.ToString() + " " + nameof(clnt.Port), clnt.Port.ToString()); ClientList.Add("Client " + index.ToString() + " " + nameof(clnt.State), clnt.State.ToString()); index++; } _data.LastTxnResult = ClientList; _data.DisplayDialog(false); _requestInProgress = false; _eft.Dispose(); } else { _data.LastTxnResult = DictionaryFromType(r); string output = string.Empty; _data.LastTxnResult.TryGetValue("Success", out output); result = (output.Equals("True")); _data.DisplayDialog(false); _requestInProgress = false; _eft.Dispose(); } }while (_requestInProgress); if (!_requestInProgress) { _data.Log($"Request: {request.ToString()} done!"); } } catch (TaskCanceledException) { _data.ConnectedState = ConnectedStatus.Disconnected; ShowError("EFT-Client Timeout", ""); } catch (ConnectionException cx) { _data.ConnectedState = ConnectedStatus.Disconnected; ShowError(cx.HResult.ToString(), cx.Message); } catch (Exception ex) { ShowError(ex.HResult.ToString(), ex.Message); } _requestInProgress = false; return(result); }