Esempio n. 1
0
            /// <summary>
            ///  Cancels all pending operations.
            /// </summary>
            /// <returns>A task that can be awaited until operations are cancelled.</returns>
            public async Task CancelOperation()
            {
                await this.protocol.ResetTerminalStateAsync();

                var signatureArgs = new SignatureEventArgs {
                    IsCanceled = true
                };

                this.SignatureEvent(null, signatureArgs);

                var inputValueArgs = new InputValueEventArgs {
                    IsCanceled = true
                };

                this.InputValueEvent(null, inputValueArgs);

                var creditCardArgs = new CardSwipeEventArgs {
                    IsCanceled = true
                };

                this.CardSwipeEvent(null, creditCardArgs);

                var pinDataArgs = new PinDataEventArgs {
                    IsCanceled = true
                };

                this.PinDataEvent(null, pinDataArgs);

                var buttonPressArgs = new ButtonPressEventArgs {
                    IsCanceled = true
                };

                this.ButtonPressEvent(null, buttonPressArgs);
            }
            /// <summary>
            ///  Handles signature data received.
            /// </summary>
            /// <param name="responseMessage">Event message.</param>
            private void HandleSignatureEvent(ResponseMessage responseMessage)
            {
                const int SignatureDataHeaderLength = 9;

                // Check for invalid signature event message.
                if (responseMessage.ResponseValues == null || responseMessage.ResponseValues.Count < 2)
                {
                    return;
                }

                int length = int.Parse(responseMessage.ResponseValues[1], CultureInfo.InvariantCulture.NumberFormat);

                this.signatureData.AddRange(responseMessage.RawData.Skip(SignatureDataHeaderLength).Take(length));

                // No more data to receive.
                if (string.Equals(responseMessage.ResponseValues[0], "N"))
                {
                    if (this.SignatureEvent != null)
                    {
                        var args = new SignatureEventArgs()
                        {
                            SignatureData = this.ConvertSignatureToUpos(this.signatureData)
                        };
                        this.SignatureEvent(this, args);
                    }
                }
            }
            private void FPE_ReceivedSigCapDataEvent(object signatureData)
            {
                string signature           = string.Empty;
                HydraSignatureEnhanced sig = new HydraSignatureEnhanced((byte[])signatureData);

                signature = Convert.ToBase64String(sig.ToByteArray());

                SignatureEventArgs args = new SignatureEventArgs()
                {
                    SignatureData = signature
                };

                this.SignatureEvent(this, args);
            }
            /// <summary>
            ///  Handles signature data started.
            /// </summary>
            /// <param name="responseMessage">Event message.</param>
            private void HandleSignatureStartEvent(ResponseMessage responseMessage)
            {
                this.signatureData.Clear();

                // If no signature data.
                if (string.Equals(responseMessage.ResponseValues[0], "00000"))
                {
                    if (this.SignatureEvent != null)
                    {
                        var args = new SignatureEventArgs()
                        {
                            IsCanceled = true
                        };
                        this.SignatureEvent(this, args);
                    }
                }
            }
            private void InternalCancelOperation()
            {
                try
                {
                    this.ClearData();

                    var signatureArgs = new SignatureEventArgs {
                        IsCanceled = true
                    };
                    this.SignatureEvent(null, signatureArgs);

                    var inputValueArgs = new InputValueEventArgs {
                        IsCanceled = true
                    };
                    this.InputValueEvent(null, inputValueArgs);

                    var creditCardArgs = new CardSwipeEventArgs {
                        IsCanceled = true
                    };
                    this.CardSwipeEvent(null, creditCardArgs);

                    var pinDataArgs = new PinDataEventArgs {
                        IsCanceled = true
                    };
                    this.PinDataEvent(null, pinDataArgs);

                    var buttonPressArgs = new ButtonPressEventArgs {
                        IsCanceled = true
                    };
                    this.ButtonPressEvent(null, buttonPressArgs);
                }
                catch (COMException ex)
                {
                    NetTracer.Warning(ex, "L5300Terminal - FPE COM exception");
                }
            }
            private void FPE_ReceivedVariableValue(string strVariableName, string strVariableValue)
            {
                // NOTE: Can not read or set variables in this event handler.  Device API does not support
                switch (strVariableName)
                {
                case "cnum":
                    // This is for Credit Card Number - as we don't need value disregard result.
                    break;

                case "Track1Data":
                    this.track1 = strVariableValue;
                    break;

                case "Track2Data":
                    // Get previous event data sent and then clear them out
                    var swipeArgs = new CardSwipeEventArgs {
                        Track1 = this.track1, Track2 = strVariableValue, Track3 = string.Empty
                    };
                    this.CardSwipeEvent(this, swipeArgs);
                    break;

                case "RetailCardType":
                    var typeArgs = new ButtonPressEventArgs();
                    typeArgs.ButtonName = strVariableValue;
                    typeArgs.IsCanceled = false;
                    this.ButtonPressEvent(this, typeArgs);
                    break;

                case "CashBackAmt":
                case "AmountOk":
                    var cashBackArgs = new ButtonPressEventArgs();
                    cashBackArgs.ButtonName = strVariableValue;
                    cashBackArgs.IsCanceled = false;
                    this.ButtonPressEvent(this, cashBackArgs);
                    break;

                case "AdditionalSecurityInformation":
                    this.additionalSecInfo = strVariableValue;
                    break;

                case "EncryptedPIN":
                    PinDataEventArgs pinArg = new PinDataEventArgs();
                    pinArg.IsCanceled         = false;
                    pinArg.EncryptedPin       = strVariableValue;
                    pinArg.AdditionalSecurity = this.additionalSecInfo;
                    this.PinDataEvent(this, pinArg);
                    this.additionalSecInfo = string.Empty;
                    break;

                case "PinPadEntry":
                    // PIN entry "Cancel" or "TMO"
                    // PIN entry "Request" is set upon form entry (but no fire event)
                    PinDataEventArgs pinPadArg = new PinDataEventArgs();
                    pinPadArg.IsCanceled         = true;
                    pinPadArg.EncryptedPin       = string.Empty;
                    pinPadArg.AdditionalSecurity = string.Empty;
                    this.PinDataEvent(this, pinPadArg);
                    break;

                case "sig":
                    string signature           = string.Empty;
                    HydraSignatureEnhanced sig = new HydraSignatureEnhanced(Convert.FromBase64String(strVariableValue));
                    signature = Convert.ToBase64String(sig.ToByteArray());

                    SignatureEventArgs sigArgs = new SignatureEventArgs()
                    {
                        SignatureData = signature
                    };
                    this.SignatureEvent(this, sigArgs);
                    break;

                default:
                    NetTracer.Information("L5300Terminal variable {0} not set to {1}", strVariableName, strVariableValue);
                    break;
                }
            }