MotorSignal-App/test/replay/telemetry_replay_engine.dart

39 lines
1.1 KiB
Dart

import 'dart:async';
import 'package:motorcycle_dash/models/telemetry_sample.dart';
import 'package:motorcycle_dash/services/validation/telemetry_validator.dart';
class ReplayScenario {
final String name;
final List<TelemetrySample> samples;
const ReplayScenario({required this.name, required this.samples});
}
class TelemetryReplayEngine {
final TelemetryValidator validator;
final _sampleController = StreamController<TelemetrySample>.broadcast();
Stream<TelemetrySample> get stream => _sampleController.stream;
TelemetryReplayEngine({TelemetryValidator? validator})
: validator = validator ?? TelemetryValidator();
Future<List<TelemetrySample>> play(ReplayScenario scenario) async {
validator.reset();
final validated = <TelemetrySample>[];
for (final sample in scenario.samples) {
final quality = validator.validate(sample);
final validatedSample = sample.copyWith(quality: quality);
validated.add(validatedSample);
_sampleController.add(validatedSample);
}
return validated;
}
void dispose() {
_sampleController.close();
}
}