public bool Save(UniverseInfo info) { throw new System.NotImplementedException(); }
public OutputProcessor(Arguments args) { if (args.Universes.Length == 0) throw new ArgumentException("No universes specified"); this.receivedData = new ConcurrentQueue<RawDmxData>(); this.fileTrigger = new ManualResetEvent(false); this.universeData = new Dictionary<int, UniverseInfo>(); switch (args.FileFormat) { case Arguments.FileFormats.Csv: this.dataWriter = new Common.CsvFileWriter(args.OutputFile); break; case Arguments.FileFormats.Binary: this.dataWriter = new Common.BinaryFileWriter(args.OutputFile); break; default: throw new ArgumentException("Invalid File Format"); } this.isRunning = true; Task.Run(() => { while (isRunning) { this.fileTrigger.WaitOne(); this.fileTrigger.Reset(); RawDmxData dmxData; while (this.receivedData.TryDequeue(out dmxData)) { bool newData = false; UniverseInfo previousData; if (!this.universeData.TryGetValue(dmxData.Universe, out previousData)) { previousData = new UniverseInfo(); previousData.Data = new byte[dmxData.Data.Length]; this.universeData.Add(dmxData.Universe, previousData); newData = true; } bool modified = !dmxData.Data.SequenceEqual(previousData.Data); if (newData) modified = true; if (previousData.Data.Length != dmxData.Data.Length) previousData.Data = new byte[dmxData.Data.Length]; Buffer.BlockCopy(dmxData.Data, 0, previousData.Data, 0, previousData.Data.Length); if (modified) { this.dataWriter.Output(Common.DmxData.CreateFullFrame( millisecond: dmxData.Timestamp, sequence: dmxData.Sequence, universe: dmxData.Universe, data: dmxData.Data)); } else { if (previousData.Sequence != dmxData.Sequence) this.dataWriter.Output(Common.DmxData.CreateNoChange( millisecond: dmxData.Timestamp, sequence: dmxData.Sequence, universe: dmxData.Universe)); } previousData.Sequence = dmxData.Sequence; this.samplesWritten++; } if ((this.samplesReceived % 100) == 0) Console.WriteLine("Received {0}, written {1} samples", this.samplesReceived, this.samplesWritten); } }); }
public OutputProcessor(Arguments args) { if (args.Universes.Length == 0) { throw new ArgumentException("No universes specified"); } this.receivedData = new ConcurrentQueue <RawDmxData>(); this.fileTrigger = new ManualResetEvent(false); this.universeData = new Dictionary <int, UniverseInfo>(); switch (args.FileFormat) { case Arguments.FileFormats.Csv: this.dataWriter = new Common.CsvFileWriter(args.OutputFile); break; case Arguments.FileFormats.Binary: this.dataWriter = new Common.BinaryFileWriter(args.OutputFile); break; case Arguments.FileFormats.PCapAcn: this.dataWriter = new Common.PCapAcnFileWriter(args.OutputFile); break; default: throw new ArgumentException("Invalid File Format"); } this.isRunning = true; Task.Run(() => { while (isRunning) { this.fileTrigger.WaitOne(); this.fileTrigger.Reset(); RawDmxData dmxData; while (this.receivedData.TryDequeue(out dmxData)) { bool newData = false; UniverseInfo previousData; if (!this.universeData.TryGetValue(dmxData.Universe, out previousData)) { previousData = new UniverseInfo(); previousData.Data = new byte[dmxData.Data.Length]; this.universeData.Add(dmxData.Universe, previousData); newData = true; } bool modified = !dmxData.Data.SequenceEqual(previousData.Data); if (newData) { modified = true; } if (previousData.Data.Length != dmxData.Data.Length) { previousData.Data = new byte[dmxData.Data.Length]; } Buffer.BlockCopy(dmxData.Data, 0, previousData.Data, 0, previousData.Data.Length); if (modified) { this.dataWriter.Output(Common.DmxData.CreateFullFrame( millisecond: dmxData.Timestamp, sequence: dmxData.Sequence, universe: dmxData.Universe, data: dmxData.Data)); } else { if (previousData.Sequence != dmxData.Sequence) { this.dataWriter.Output(Common.DmxData.CreateNoChange( millisecond: dmxData.Timestamp, sequence: dmxData.Sequence, universe: dmxData.Universe)); } } previousData.Sequence = dmxData.Sequence; this.samplesWritten++; } if ((this.samplesReceived % 100) == 0) { Console.WriteLine("Received {0}, written {1} samples", this.samplesReceived, this.samplesWritten); } } }); }