private async Task EnableRfid(RfidOptions options) { logger.Information("Starting RFID"); stream = factory.CreateStream(options.GetConnectionString()); disposable = new CompositeDisposable(stream, stream.Tags.Subscribe(x => { if (options.PersistTags) { logger.Swallow(() => storageService.AppendTag(mapper.Map <Tag>(x))); } AppendRiderId(x.TagId); })); aggregator = TimestampAggregatorConfigurations.ForCheckpoint(TimeSpan.FromMilliseconds(options.CheckpointAggregationWindowMs)); disposable.Add(stream.Connected.CombineLatest(stream.Heartbeat, (con, hb) => new ReaderStatus { IsConnected = con, Heartbeat = hb }) .Subscribe(OnReaderStatus) ); disposable.Add(checkpoints.Subscribe(aggregator)); disposable.Add(aggregator.Subscribe(OnCheckpoint)); disposable.Add(aggregator.AggregatedCheckpoints.Subscribe(OnCheckpoint)); await stream.Start(); }
public void Initialize(IEnumerable <Checkpoint> initialCheckpoints = null) { Track = new TrackOfCheckpoints(StartTime, FinishCriteria); RawCheckpoints.Clear(); AggCheckpoints.Clear(); checkpointAggregator = TimestampAggregatorConfigurations.ForCheckpoint(MinLap); checkpointAggregator.Subscribe(Track.Append); checkpointAggregator.AggregatedCheckpoints.Subscribe(AggCheckpoints.Add); foreach (var checkpoint in initialCheckpoints) { checkpointAggregator.OnNext(ResolveRiderId(checkpoint)); } }