public static Span <byte> GetDataPacket(byte[] CID, string sourceName, UInt16 universe, byte[] properties) { var rootLayer = new RootLayer { CID = CID, Vector = RootLayerVector.VECTOR_ROOT_E131_DATA }; var framingLayer = new DataPacketFramingLayer { SourceName = sourceName, Universe = universe }; var dmpLayer = new DMPLayer { PropertyValues = properties }; int totalLength = dmpLayer.Length + DataPacketFramingLayer.Length + RootLayer.Length; using var owner = MemoryPool <byte> .Shared.Rent(totalLength); var bytes = owner.Memory.Span.Slice(0, totalLength); rootLayer.Write(bytes, (UInt16)(DataPacketFramingLayer.Length + dmpLayer.Length)); framingLayer.Write(bytes.Slice(RootLayer.Length), dmpLayer.Length); dmpLayer.Write(bytes.Slice(RootLayer.Length + DataPacketFramingLayer.Length)); return(bytes); }
public void When_WriteIsCalled_Then_TheDataIsCorrect() { string sourceName = "My source name"; byte priority = 134; UInt16 syncAddress = 1023; byte sequenceNumber = 135; byte options = 0; UInt16 universe = 1953; var framingLayer = new DataPacketFramingLayer() { SourceName = sourceName, Priority = priority, SynchronizationAddress = syncAddress, SequenceNumber = sequenceNumber, Options = options, Universe = universe }; var expectedBytes = GetDataPacketFramingLayer(sourceName, priority, syncAddress, sequenceNumber, options, universe); using var owner = MemoryPool <byte> .Shared.Rent(DataPacketFramingLayer.Length); var actualBytes = owner.Memory.Span.Slice(0, DataPacketFramingLayer.Length); framingLayer.Write(actualBytes, 0); Assert.Equal(expectedBytes.ToArray(), actualBytes.ToArray()); }