public async Task PlaySession(EventCaptureSession captureSession)
        {
            _monitoringEvents = true;
            var discoveryEvents = new List <DeviceDiscoveryEvent>();

            foreach (var capturedEvents in captureSession.CapturedEvents)
            {
                discoveryEvents.AddRange(capturedEvents.Value);
            }
            discoveryEvents = discoveryEvents.OrderBy(x => x.TimeStamp).ToList();
            var timeDiffs = new TimeSpan[discoveryEvents.Count];

            for (int i = 0; i < discoveryEvents.Count - 1; i++)
            {
                timeDiffs[i] = discoveryEvents[i + 1].TimeStamp - discoveryEvents[i].TimeStamp;
            }
            for (int i = 0; i < discoveryEvents.Count - 1; i++)
            {
                if (i > 0)
                {
                    await Task.Delay(timeDiffs[i - 1]);
                }
                var discoveryEvent = discoveryEvents[i];
                discoveryEvent.TimeStamp = DateTime.Now;
                OnDeviceDiscovery(discoveryEvent);
            }
            _monitoringEvents = false;
        }
 private BleLocatorModel()
 {
     BleUdpListeners         = new List <BLEUdpListener>();
     _capturedEventsSession  = new EventCaptureSession();
     _discoveredEventHandler = new ActionBlock <DeviceDiscoveryEvent>((ce) => HandleDiscoveryEvent(ce), new ExecutionDataflowBlockOptions {
         MaxDegreeOfParallelism = 5
     });
     LoadConfiguration();
 }