Example #1
0
        public IActionResult Scan(string qRCode)
        {
            var qRCodeScanned = QRCodeScanned.Create(qRCode);

            _eventBus.Publish(qRCodeScanned, "QRCodeScanned");
            return(Ok(qRCode));
        }
Example #2
0
        public Task <bool> ScanQRCodeContinously(string message, QRCodeScanned onQrCodeScannedFunction, string closeButtonTitle = "Close", bool tryInverted = false)
        {
            var taskCompleteSource = new TaskCompletionSource <bool>();

            ScanQrController.ScanContinuously(ViewHelper.CurrentActivity, message, closeButtonTitle, onQrCodeScannedFunction, taskCompleteSource, tryInverted);

            return(taskCompleteSource.Task);
        }
Example #3
0
        public static void ScanContinuously(
            Activity activity,
            string message,
            string closeButtonTitle,
            QRCodeScanned onQrCodeScannedFunction,
            TaskCompletionSource <bool> taskCompletionSource,
            bool tryInverted)
        {
            BarcodeScanner.Initialize(activity.Application);

            var scanner     = new BarcodeScanner();
            var overlayView = new ScanQrOverlayView(activity);

            scanner.CustomOverlay = overlayView;
            overlayView.SetDescriptionText(message);
            overlayView.SetCloseButtonText(closeButtonTitle);
            var position = 0;

            bool isScanningContinouslyExecuting = false;

            scanner.ScanContinuously(new MobileBarcodeScanningOptions()
            {
                DelayBetweenContinuousScans = 3000,
                TryInverted = tryInverted
            },
                                     async result =>
            {
                if (isScanningContinouslyExecuting)
                {
                    return;
                }
                isScanningContinouslyExecuting = true;

                var scanQrUpdate = await onQrCodeScannedFunction.Invoke(position, result.Text);

                if (scanQrUpdate == null)
                {
                    return;
                }

                if (scanQrUpdate.WillCancel)
                {
                    taskCompletionSource.SetResult(true);
                    taskCompletionSource = null;
                    scanner.Cancel();
                    return;
                }

                overlayView.SetDescriptionText(scanQrUpdate.UpdateMessage);
                position++;

                isScanningContinouslyExecuting = false;
            });
        }
Example #4
0
        private async Task WaitUntilScanned()
        {
            while (true)
            {
                string getResult = await netHandler.GETRequestAsync(qrStatusURL + "&tip=" + (qrCodeScanned ? "0" : "1"), true);

                if (getResult.Contains("408"))
                {
                    continue;
                }
                else if (getResult.Contains("400"))
                {
                    QRCodeExpired?.Invoke(this, null);
                    return;
                }
                else if (getResult.Contains("201"))
                {
                    NetworkHandler.ReadUntil(ref getResult, "base64,");
                    MemoryStream ms = new MemoryStream(Convert.FromBase64String(NetworkHandler.ReadUntil(ref getResult, "'")));
                    Image        pp = Image.FromStream(ms);
                    qrCodeScanned = true;
                    QRCodeScanned.Invoke(this, new QRCodeScannedEventArgs()
                    {
                        profilePicture = pp
                    });
                }
                else if (getResult.Contains("200"))
                {
                    NetworkHandler.ReadUntil(ref getResult, "uri=\"");
                    redirectUri = NetworkHandler.ReadUntil(ref getResult, "\"");
                    host        = redirectUri;
                    NetworkHandler.ReadUntil(ref host, "//");
                    host = NetworkHandler.ReadUntil(ref host, "/");
                    LoginConfirmed.Invoke(this, null);
                    FinishLoginAsync();
                    break;
                }
            }
        }