public void HandleDeviceDiscovered()

in src/Covi/Features/BluetoothTracing/DeviceManager/Internal/DefaultDeviceManager.cs [87:151]


        public void HandleDeviceDiscovered(DeviceDescriptor deviceDescriptor, Action<DeviceDescriptor> onNext = null)
        {
            lock (_discoveryLock)
            {
                try
                {
                    DeviceDescriptor descriptor = deviceDescriptor;
                    deviceDescriptor.Processing = true;
                    var existingDevice = _discoveredDevices.GetOrAdd(deviceDescriptor.Identifier, deviceDescriptor);
                    if (existingDevice != null && existingDevice != deviceDescriptor)
                    {
                        // If some other thread already processing - then cancel
                        if (!Monitor.TryEnter(deviceDescriptor.ProcessingLock))
                        {
                            return;
                        }

                        try
                        {
                            // TODO: log contact time here for further analysis of exposure time and signal strength
                            if (!existingDevice.Processing && !existingDevice.Ignore)
                            {
                                // Avoid processing already processed devices
                                if (existingDevice.Processed)
                                {
                                    if (DateTime.UtcNow - existingDevice.DiscoveryTime <=
                                        Configuration.Constants.BluetoothConstants.DeviceThrottleTime)
                                    {
                                        return;
                                    }
                                }

                                //Update context information
                                existingDevice.Context = deviceDescriptor.Context;
                                existingDevice.DiscoveryTime = deviceDescriptor.DiscoveryTime;
                                existingDevice.RSSI = deviceDescriptor.RSSI;
                                existingDevice.Processing = true;
                                existingDevice.Processed = false;
                                descriptor = existingDevice;
                            }
                            else
                            {
                                // device already being processed
                                return;
                            }
                        }
                        finally
                        {
                            Monitor.Exit(deviceDescriptor.ProcessingLock);
                        }
                    }

                    _logger.LogDebug($"DeviceManager - Device Discovered - Connecting. id: {descriptor.Identifier}.");

                    onNext?.Invoke(descriptor);

                    InvokeCleanupIfNeeded();
                }
                catch (Exception e)
                {
                    _logger.LogError(
                        e, $"DeviceManager - Device Discovered - Error. id: {deviceDescriptor.Identifier}.");
                }
            }
        }