Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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)
                {
                }
            }
        }
Exemple #5
0
        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)
                {
                }
            }
        }