예제 #1
0
        private void AcnSocket_NewPacket(object sender, Acn.Sockets.NewPacketEventArgs <Acn.Packets.sAcn.StreamingAcnDmxPacket> e)
        {
            if (this.masterClock == null)
            {
                this.masterClock = Stopwatch.StartNew();
            }
            ulong timestamp = (ulong)this.masterClock.ElapsedMilliseconds;

            var propData = e.Packet.Dmx.PropertyData;

            if (propData.Length < 1)
            {
                // Unknown/unsupported
                return;
            }

            if (propData[0] != 0)
            {
                // We only support start code 0
                return;
            }

            var newDmxData = e.Packet.Dmx.PropertyData;

            UniverseData universeData;

            if (!this.universes.TryGetValue(e.Packet.Framing.Universe, out universeData))
            {
                // Unknown universe
                return;
            }

            long sequence = e.Packet.Framing.SequenceNumber + universeData.SequenceHigh;

            if (e.Packet.Framing.SequenceNumber < universeData.LastSequenceLow)
            {
                // Wrap
                universeData.SequenceHigh += 256;
                sequence += 256;
            }
            universeData.LastSequenceLow = e.Packet.Framing.SequenceNumber;

            var dmxData = RawDmxData.Create(
                millisecond: timestamp,
                sequence: sequence,
                universe: e.Packet.Framing.Universe,
                data: newDmxData.Skip(1).ToArray());

            this.writer.AddData(dmxData);
        }
예제 #2
0
 void socket_NewPacket(object sender, Acn.Sockets.NewPacketEventArgs<DJTapPacket> e)
 {
     if(e.Packet is Timecode)
         TimecodePacket = (Timecode) e.Packet;
 }