public void ButtonClick(string buttonID) { if (UserInputEvent != null) { UIMessageEventArgs eventArgs = new UIMessageEventArgs(); eventArgs.message = new UIMessage(buttonID); UserInputEvent(this, eventArgs); } }
private void SetStatusLabel(UIMessageEventArgs message, InterFaceType interFaceType) { foreach (UIMessageEventArgs ui in statusMessages.ToArray()) { if (ui.MessageIdentifiers == message.MessageIdentifiers) { return; } } Logger.Log("SetStatusLabel: " + interFaceType + " - " + message.MessageIdentifiers + " additional mesage:" + message.AdditionalMessage); if (message.MessageIdentifiers == MessageIdentifiersEnum.SeePhone) { SetTxFinalResultLabel("See Phone"); } statusMessages.Enqueue(message); }
private void StartStatusMessageProcessor() { Task.Run(() => { while (1 == 1) { if (statusMessages.Count > 0) { UIMessageEventArgs e = statusMessages.Dequeue(); Device.BeginInvokeOnMainThread(() => { lblStatusPaymentApp.Text = MapMessageIdentifier(e.MessageIdentifiers) + (String.IsNullOrEmpty(e.AdditionalMessage)? "" : " - " + e.AdditionalMessage); }); if (e.MessageIdentifiers != MessageIdentifiersEnum.ClearDisplay) { if (e.HoldTime > 0) { Task.Delay(checked ((int)e.HoldTime)).Wait(); //Task.Delay(2000).Wait(); } else { Task.Delay(500).Wait(); } } } else { Task.Delay(500).Wait(); if (cancellationTokenForStatusMessage.Token.IsCancellationRequested) { break; } } if (cancellationTokenForStatusMessage.Token.IsCancellationRequested) { break; } } }); }
private void ReciveUIViewMessage(object sender, UIMessageEventArgs e) { switch (e.message.MessageId) { case "forward": model.Move(MotionDirection.Backward, 1); break; case "backward": model.Move(MotionDirection.Backward, 1); break; case "left": model.Move(MotionDirection.Left, 1); break; case "right": model.Move(MotionDirection.Right, 1); break; default: break; } }
protected void OnUserInterfaceRequest(UIMessageEventArgs e) { UserInterfaceRequest?.Invoke(this, e); }
private void ProcessCompletion(TerminalProcessingOutcomeEventArgs e, InterFaceType interFaceType) { TLV data = null; TLV discretionaryData = null; QRDEList qrData = null; try { long?amount = Convert.ToInt64(totalAmount.Total); TerminalProcessingOutcome tpo = e.TerminalProcessingOutcome; if (tpo == null)//error occurred, error displayed via Ta_ExceptionOccured { return; } if (tpo is EMVTerminalProcessingOutcome) { data = ((EMVTerminalProcessingOutcome)tpo).DataRecord; discretionaryData = ((EMVTerminalProcessingOutcome)tpo).DiscretionaryData; qrData = ((EMVTerminalProcessingOutcome)tpo).QRData; if (data != null) //error { SetStatusLabel(new UIMessageEventArgs(MessageIdentifiersEnum.RemoveCard, StatusEnum.EndProcessing), interFaceType); //may be a contactless magstripe transaction if (data.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag) == null) { txResult = TxResult.ContactlessMagOnline; } else { if (((data.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag).Value[0] & 0xC0) >> 6) == (byte)ACTypeEnum.ARQC) { if (interFaceType == InterFaceType.Contact) { throw new EMVProtocolException("Invalid state for contact, gen ac 2 returned arqc?"); } CARDHOLDER_VERIFICATION_METHOD_CVM_RESULTS_9F34_KRN cvmr = new CARDHOLDER_VERIFICATION_METHOD_CVM_RESULTS_9F34_KRN(data.Children.Get(EMVTagsEnum.CARDHOLDER_VERIFICATION_METHOD_CVM_RESULTS_9F34_KRN.Tag)); if (cvmr.Value.GetCVMPerformed() == CVMCode.EncipheredPINVerifiedOnline) { ContactlessApp_PinRequest(data.Children); } txResult = TxResult.ContactlessOnline; } if (((data.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag).Value[0] & 0xC0) >> 6) == (byte)ACTypeEnum.TC) { txResult = TxResult.Approved; } if (((data.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag).Value[0] & 0xC0) >> 6) == (byte)ACTypeEnum.AAC) { txResult = TxResult.Declined; } } } else if (qrData != null) { if (interFaceType == InterFaceType.QRCodeScanned) { txResult = TxResult.QRCodeScanned; } else if (interFaceType == InterFaceType.QRCodeToPoll) { txResult = TxResult.QRCodeToPoll; } } else { txResult = TxResult.Declined; } SetTxFinalResultLabel(txResult.ToString()); } else { SetStatusLabel(new UIMessageEventArgs(tpo.UserInterfaceRequest.MessageIdentifier, tpo.UserInterfaceRequest.Status), interFaceType); } } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { UIMessageEventArgs ui = new UIMessageEventArgs(MessageIdentifiersEnum.TryAgain, StatusEnum.ProcessingError) { AdditionalMessage = ex.Message }; SetStatusLabel(ui, interFaceType); }); } finally { StopContactPaymentApp(); StopContactlessPaymentApp(); StopQRCodePollPaymentApp(); #region Merge EMV Lists if (discretionaryData != null) { if (data != null) { data.Children.AddListToList(discretionaryData.Children); } } #endregion TxCompleted?.Invoke(this, new TxCompletedEventArgs(txResult, interFaceType, Optional <TLV> .Create(data), Optional <QRDEList> .Create(qrData))); } }
protected void OnUIMessage(UIMessageEventArgs e) { var handler = UIMessage; if (handler != null) handler(this, e); }