예제 #1
0
        private void StartPrinterSearch()
        {
            DiscoveryHandlerImplementation discoveryHandler = new DiscoveryHandlerImplementation();

            try
            {
                DependencyService.Get <IConnectionManager>().FindBluetoothPrinters(discoveryHandler);
            }
            catch (NotImplementedException)
            {
                Device.BeginInvokeOnMainThread(async() =>
                {
                    await Application.Current.MainPage.DisplayAlert("Error", "Bluetooth discovery not supported on this platform", "OK");
                });
            }
        }
예제 #2
0
        private async Task DiscoverPrintersAsync()
        {
            await ClearDiscoveredPrinterListAsync();

            await Task.Factory.StartNew(() => {
                viewModel.IsPrinterListRefreshing = true;
            });

            Device.BeginInvokeOnMainThread(async() => {
                await AnimateRefreshIconAsync();
            });

            await Task.Factory.StartNew(() => {
                try {
                    List <DiscoveredPrinter> usbDriverPrinters = DependencyService.Get <IConnectionManager>().GetZebraUsbDriverPrinters();
                    foreach (DiscoveredPrinter printer in usbDriverPrinters)
                    {
                        Device.BeginInvokeOnMainThread(() => {
                            viewModel.DiscoveredPrinterList.Add(printer); // ListView view model operations must be done on UI thread due to iOS issues when clearing list while item is selected: https://forums.xamarin.com/discussion/19114/invalid-number-of-rows-in-section
                        });
                    }
                } catch (Exception) {
                    // Do nothing
                }

                try {
                    DiscoveryHandlerImplementation usbDiscoveryHandler = new DiscoveryHandlerImplementation(this);
                    DependencyService.Get <IConnectionManager>().GetZebraUsbDirectPrinters(usbDiscoveryHandler);

                    while (!usbDiscoveryHandler.IsFinished)
                    {
                        Thread.Sleep(100);
                    }
                } catch (Exception) {
                    // Do nothing
                }

                DiscoveryHandlerImplementation networkDiscoveryHandler = new DiscoveryHandlerImplementation(this);
                NetworkDiscoverer.LocalBroadcast(networkDiscoveryHandler);

                while (!networkDiscoveryHandler.IsFinished)
                {
                    Thread.Sleep(100);
                }

                if (Device.RuntimePlatform != Device.WPF || DependencyService.Get <IPlatformHelper>().IsWindows10())
                {
                    try {
                        DiscoveryHandlerImplementation bluetoothDiscoveryHandler = new DiscoveryHandlerImplementation(this);
                        DependencyService.Get <IConnectionManager>().FindBluetoothPrinters(bluetoothDiscoveryHandler);

                        while (!bluetoothDiscoveryHandler.IsFinished)
                        {
                            Thread.Sleep(100);
                        }
                    } catch (Exception) {
                        // Do nothing
                    }
                }
            });

            await Task.Factory.StartNew(() => {
                viewModel.IsPrinterListRefreshing = false;
            });

            ViewExtensions.CancelAnimations(RefreshIcon);
        }
예제 #3
0
        private async void DiscoverPrintersButton_Clicked(object sender, EventArgs eventArgs)
        {
            SetInputEnabled(false);

            try {
                ClearDiscoveredPrinters();

                DiscoveryHandlerImplementation discoveryHandler = new DiscoveryHandlerImplementation(this);

                await Task.Factory.StartNew(() => {
                    switch (GetSelectedDiscoveryMethod())
                    {
                    case DiscoveryMethod.LocalBroadcast:
                        NetworkDiscoverer.LocalBroadcast(discoveryHandler);
                        break;

                    case DiscoveryMethod.DirectedBroadcast:
                        NetworkDiscoverer.DirectedBroadcast(discoveryHandler, IpAddressEntry.Text);
                        break;

                    case DiscoveryMethod.MulticastBroadcast:
                        if (string.IsNullOrWhiteSpace(NumberOfHopsEntry.Text))
                        {
                            throw new ArgumentException("Number of hops must not be empty");
                        }

                        try {
                            NetworkDiscoverer.Multicast(discoveryHandler, int.Parse(NumberOfHopsEntry.Text));
                        } catch (FormatException) {
                            Device.BeginInvokeOnMainThread(async() => {
                                await DisplayAlert("Format Error", "Number of hops must be an integer", "OK");
                            });
                        } finally {
                            SetInputEnabled(true);
                        }
                        break;

                    case DiscoveryMethod.SubnetSearch:
                        if (string.IsNullOrWhiteSpace(SubnetRangeEntry.Text))
                        {
                            throw new ArgumentException("Subnet range must not be empty");
                        }

                        NetworkDiscoverer.SubnetSearch(discoveryHandler, SubnetRangeEntry.Text);
                        break;

                    case DiscoveryMethod.ZebraUsbDrivers:
                        try {
                            foreach (DiscoveredPrinter printer in DependencyService.Get <IConnectionManager>().GetZebraUsbDriverPrinters())
                            {
                                Device.BeginInvokeOnMainThread(() => {
                                    discoveredPrinters.Add(printer);
                                });
                            }
                        } catch (NotImplementedException) {
                            Device.BeginInvokeOnMainThread(async() => {
                                await DisplayAlert("Error", "USB driver discovery not supported on this platform", "OK");
                            });
                        } finally {
                            SetInputEnabled(true);
                        }
                        break;

                    case DiscoveryMethod.UsbDirect:
                        try {
                            DependencyService.Get <IConnectionManager>().GetZebraUsbDirectPrinters(discoveryHandler);
                        } catch (NotImplementedException) {
                            Device.BeginInvokeOnMainThread(async() => {
                                await DisplayAlert("Error", "USB direct discovery not supported on this platform", "OK");
                            });
                        } finally {
                            SetInputEnabled(true);
                        }
                        break;

                    case DiscoveryMethod.FindPrintersNearMe:
                        NetworkDiscoverer.FindPrinters(discoveryHandler);
                        break;

                    case DiscoveryMethod.FindAllBluetoothDevices:
                        try {
                            DependencyService.Get <IConnectionManager>().FindBluetoothPrinters(discoveryHandler);
                        } catch (NotImplementedException) {
                            Device.BeginInvokeOnMainThread(async() => {
                                await DisplayAlert("Error", "Bluetooth discovery not supported on this platform", "OK");
                            });
                        } finally {
                            SetInputEnabled(true);
                        }
                        break;
                    }
                });
            } catch (Exception e) {
                await DisplayAlert("Error", e.Message, "OK");

                SetInputEnabled(true);
            }
        }