private static DateTime GetStartTimeFromFile(string filename, IPersistentFormatDeserializer deserializer) { DateTime startTime; using var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); (_, startTime) = deserializer.DeserializeRecords(stream).First(); return(startTime); }
private static IEnumerator <(T, DateTime)> EnumerateFile(string filename, IPersistentFormatDeserializer deserializer) { using var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); foreach (var record in deserializer.DeserializeRecords(stream)) { yield return((T)record.Item1, record.Item2); } }
private void FilePersistenceFormatTest(string extension, IPersistentFormatSerializer serializer, IPersistentFormatDeserializer deserializer) { var filePath = $"{this.path}/test.{extension}"; using (var p = Pipeline.Create()) { var gen = Generators.Range(p, 0, 10, TimeSpan.FromMilliseconds(10)); var file = new FileWriter <int>(p, filePath, serializer); gen.PipeTo(file); p.Run(); } using (var q = Pipeline.Create()) { var read = new FileSource <int>(q, filePath, deserializer); var results = read.ToObservable().ToListObservable(); q.Run(); Assert.IsTrue(Enumerable.SequenceEqual(results.AsEnumerable(), new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 })); } }
/// <summary> /// Initializes a new instance of the <see cref="FileSource{T}"/> class. /// </summary> /// <param name="pipeline">The pipeline to add the component to.</param> /// <param name="filename">File name to which to persist.</param> /// <param name="deserializer">Format serializer with which messages are deserialized.</param> /// <param name="name">An optional name for the component.</param> public FileSource(Pipeline pipeline, string filename, IPersistentFormatDeserializer deserializer, string name = nameof(FileSource <T>)) : base(pipeline, EnumerateFile(filename, deserializer), GetStartTimeFromFile(filename, deserializer), name: name) { }
/// <summary> /// Initializes a new instance of the <see cref="FileSource{T}"/> class. /// </summary> /// <param name="pipeline">Pipeline to which this component belongs.</param> /// <param name="filename">File name to which to persist.</param> /// <param name="deserializer">Format serializer with which messages are deserialized.</param> public FileSource(Pipeline pipeline, string filename, IPersistentFormatDeserializer deserializer) : base(pipeline, EnumerateFile(pipeline, filename, deserializer)) { }