Exemplo n.º 1
0
        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
        }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
        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);
        }