/// <summary> /// Initializes a new instance of the <see cref="FileWriter{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="serializer">Format serializer with which messages are serialized.</param> /// <param name="name">An optional name for the component.</param> public FileWriter(Pipeline pipeline, string filename, IPersistentFormatSerializer serializer, string name = nameof(FileWriter <T>)) { this.name = name; this.file = File.Create(filename); this.In = pipeline.CreateReceiver <T>(this, (m, e) => this.WriteRecord(m, e, serializer), nameof(this.In)); this.In.Unsubscribed += _ => serializer.PersistFooter(this.file, this.state); }
private void WriteRecord(T message, Envelope envelope, IPersistentFormatSerializer serializer) { if (this.first) { this.state = serializer.PersistHeader(message, this.file); } serializer.PersistRecord(message, envelope.OriginatingTime, this.first, this.file, this.state); this.first = false; }
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 })); } }