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 Given_TheAddressIncrementIsIncorrect_When_ParseIsCalled_Then_NullIsReturned() { List <byte> bytes = new List <byte>(); UInt16 propertyCount = 5; byte length = (byte)(DMPLayer.MinLength + propertyCount); UInt16 expectedFlagsAndLength = (UInt16)(0x7 << 12 | length); bytes.AddRange(new byte[] { 0x7 << 4, (length) }); // flags and length DMPLayerVector expectedVector = DMPLayerVector.VECTOR_DMP_SET_PROPERTY; bytes.Add((byte)expectedVector); // Vector byte expectedAddressAndDataType = DMPLayer.AddressTypeAndDataType; bytes.Add(expectedAddressAndDataType); bytes.AddRange(new byte[] { 0, 0 }); // first property address bytes.AddRange(new byte[] { 0, 42 }); // address increment bytes.AddRange(new byte[] { 0, (byte)propertyCount }); // property count var expectedProperties = Enumerable.Range(0, propertyCount).Select(x => (byte)x); bytes.Add(0); // start code bytes.AddRange(expectedProperties); var dmpLayer = DMPLayer.Parse(bytes.ToArray()); Assert.Null(dmpLayer); }
public DataPacket() { RootLayer = new RootLayer { Vector = RootLayerVector.VECTOR_ROOT_E131_DATA }; FramingLayer = new DataPacketFramingLayer(); DMPLayer = new DMPLayer(); }
public void Given_TheDataIsCorrect_When_ParseIsCalled_Then_TheDataIsParsedAsExpected() { UInt16 propertyCount = 5; var expectedProperties = Enumerable.Range(0, propertyCount).Select(x => (byte)x); var bytes = GetDMPLayer(expectedProperties); var dmpLayer = DMPLayer.Parse(bytes.ToArray()); Assert.Equal(DMPLayerVector.VECTOR_DMP_SET_PROPERTY, dmpLayer.Vector); Assert.Equal(propertyCount, dmpLayer.PropertyValues.Count()); Assert.Equal(expectedProperties.ToArray(), dmpLayer.PropertyValues); }
public void When_WriteIsCalled_Then_TheDataIsCorrect() { var properties = Enumerable.Range(0, 200).Select(x => (byte)x).ToArray(); var dmpLayer = new DMPLayer() { PropertyValues = properties }; var expectedBytes = GetDMPLayer(properties); using var owner = MemoryPool <byte> .Shared.Rent(DMPLayer.MinLength + properties.Length); var actualBytes = owner.Memory.Span.Slice(0, DMPLayer.MinLength + properties.Length); dmpLayer.Write(actualBytes); Assert.Equal(expectedBytes.ToArray(), actualBytes.ToArray()); }