private void InsertOrReplaceBeaconInCollection(IBluetoothBeacon beacon) { try { var devices = _data.Devices; _isBusy = true; var bluetoothAddress = beacon.BluetoothAddress; var found = devices.ContainsKey(bluetoothAddress); if (found) { SaveDataFromExistingBeaconToNewOne(beacon, devices, bluetoothAddress); } devices.Add(bluetoothAddress, beacon); } catch (Exception ex) { Debug.WriteLine($"Oooops, Lost Package {ex.Message}"); } finally { _isBusy = false; } }
public void CopyMissedPackagesFromBeacon(IBluetoothBeacon source) { var existingPackages = source.Packages; var packages = existingPackages.GetPackages(); foreach (var package in packages) { var type = package.GetType(); if (_beaconPackages.ContainsKey(type)) { continue; } _beaconPackages.Add(type, package); } }
private static void SaveDataFromExistingBeaconToNewOne(IBluetoothBeacon beacon, IDictionary <ulong, IBluetoothBeacon> devices, ulong bluetoothAddress) { IBluetoothBeacon existingBeacon; const int endlessLoopLimit = 40; var tries = 0; while (!devices.TryGetValue(bluetoothAddress, out existingBeacon)) { if (tries++ > endlessLoopLimit) { throw new Exception("Can't read value!"); } } beacon.CopyMissedPackagesFromBeacon(existingBeacon); beacon.UpdatePackageCounterAndPeriodBetweenPackages(existingBeacon); devices.Remove(bluetoothAddress); }
public static void AddPackagesFromManufacturerSection(IBluetoothAdvertisementPackage eventArgs, IBluetoothBeacon beaconDevice) { var manufacturerSections = eventArgs.Advertisement.ManufacturerData; foreach (var manufacture in manufacturerSections) { var array = manufacture.Data.ToArray(); try { var package = PackageFactory.CreatePackageFromManufacturerPayload(array); beaconDevice.AddPackage(package); } catch (PackageException e) { } } }
public static void AddPackagesFromDataSection(IBluetoothAdvertisementPackage eventArgs, IBluetoothBeacon beaconDevice) { var dataSections = eventArgs.Advertisement.DataSections; foreach (var data in dataSections) { var array = data.Data.ToArray(); try { var package = PackageFactory.CreatePackageFromDataPayload(array); beaconDevice.AddPackage(package); } catch (PackageException e) { } } }