private void AcnSocket_NewPacket(object sender, Acn.Sockets.NewPacketEventArgs<Acn.Packets.sAcn.StreamingAcnDmxPacket> e)
{
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;
if (this.timestamper == null)
this.timestamper = Stopwatch.StartNew();
var dmxData = RawDmxData.Create(
millisecond: this.timestamper.ElapsedMilliseconds,
sequence: sequence,
universe: e.Packet.Framing.Universe,
data: newDmxData.Skip(1).ToArray());
this.writer.AddData(dmxData);
}