コード例 #1
0
        protected override void OnAppearing()
        {
            _discoveryService = new DiscoveryService();

            _discoveryService.OnDevice += async(sender, device) =>
                                          _devicesSource.Add(await TargetDevice.FromDiscoveredDeviceAsync(device.DiscoveredDevice));

            _discoveryService.OnDeviceDisconnect += (sender, device) =>
                                                    _devicesSource.RemoveMany(_devicesSource.Items.Where(x => x.Usn == device.DiscoveredDevice.Usn));

            base.OnAppearing();
        }
コード例 #2
0
        private Task SearchAsync()
        {
            Device.BeginInvokeOnMainThread(() => { ViewModel.Device = "Searching"; });

            var tcs = new TaskCompletionSource <bool>();

            Task.Run(async() =>
            {
                using (var discoveryService = new DiscoveryService())
                    using (var observer = new AnonymousObserver <DeviceAvailableEventArgs>(async e =>
                    {
                        State.PreviousDevice = await TargetDevice.FromDiscoveredDeviceAsync(e.DiscoveredDevice);
                        tcs.SetResult(true);
                    }))
                    {
                        var pipeline = Observable
                                       .FromEventPattern <DeviceAvailableEventArgs>(
                            handler => discoveryService.OnDevice += handler,
                            handler => discoveryService.OnDevice -= handler
                            )
                                       .Select(x => x.EventArgs);

                        if (State.PreviousDevice == null)
                        {
                            pipeline = pipeline
                                       .Take(1);
                        }

                        if (State?.PreviousDevice?.Usn != null)
                        {
                            pipeline = pipeline
                                       .Where(x => x.DiscoveredDevice.Usn == State.PreviousDevice.Usn)
                                       .Take(1);
                        }

                        pipeline.Subscribe(observer);

                        await discoveryService.SearchAsync();
                        tcs.SetResult(true);
                    }
            });

            return(tcs.Task);
        }