Ejemplo n.º 1
0
        public void Dispose()
        {
            this.isRunning = false;
            // Trigger
            this.fileTrigger.Set();

            Console.WriteLine("Received {0} samples", this.samplesReceived);

            (this.dataWriter as IDisposable)?.Dispose();
            this.dataWriter = null;
        }
Ejemplo n.º 2
0
 public TrimEnd(Common.IFileReader fileReader, Common.IFileWriter fileWriter, long trimPos)
 {
     this.fileReader = fileReader;
     this.fileWriter = fileWriter;
     this.trimPos    = trimPos;
 }
Ejemplo n.º 3
0
 public FileConvert(Common.IFileReader fileReader, Common.IFileWriter fileWriter)
 {
     this.fileReader = fileReader;
     this.fileWriter = fileWriter;
     this.universes  = new HashSet <int>();
 }
Ejemplo n.º 4
0
        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);
                    }
                }
            });
        }
Ejemplo n.º 5
0
 public TrimBlack(Common.IFileReader fileReader, Common.IFileWriter fileWriter)
 {
     this.fileReader = fileReader;
     this.fileWriter = fileWriter;
 }