예제 #1
0
        public async Task ScanAsync(CancellationToken token)
        {
            if (!_isConnected)
            {
                throw new InvalidOperationException("Not connected to MQTT.");
            }

            Log?.Invoke(this, new LogArgs("Scanning..."));

            _mqttClient.UseApplicationMessageReceivedHandler(e =>
            {
                var args = new ScanResultArgs(Encoding.UTF8.GetString(e.ApplicationMessage.Payload));
                ScanResultFound?.Invoke(this, args);
            });

            await _mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("locomotives/discovery").Build());

            while (!token.IsCancellationRequested && _isConnected)
            {
                await Task.Delay(10);
            }

            Log?.Invoke(this, new LogArgs("Disconnecting..."));

            await _mqttClient.DisconnectAsync();
        }
예제 #2
0
        public async void StartScanning()
        {
            _scanner = new MobileBarcodeScanner();

            ScanStatusChanged?.Invoke(this, new ScanStatusEventArgs {
                ScanStatus = "Starting Scan"
            });
            var result = await _scanner.Scan();

            if (result != null)
            {
                ScanStatusChanged?.Invoke(this, new ScanStatusEventArgs {
                    ScanStatus = "Scan Result Received"
                });
                ScanResultFound?.Invoke(this, new ScanResultEventArgs {
                    ScannedText = result.Text
                });
            }
            else
            {
                ScanStatusChanged?.Invoke(this, new ScanStatusEventArgs {
                    ScanStatus = "Scan Cancelled"
                });
            }
        }
예제 #3
0
        void ReceivedScanData(object sender, Scanner.DataEventArgs e)
        {
            if (e.P0 != null && e.P0.Result == ScannerResults.Success)
            {
                var resultData  = e.P0.GetScanData();
                var firstResult = resultData.FirstOrDefault();

                if (firstResult != null)
                {
                    ScanResultFound?.Invoke(sender, new ScanResultEventArgs {
                        ScannedText = firstResult.Data
                    });
                }

                StopScanning();
            }
        }