public static Span <byte> GetUniverseDiscoveryPacket(byte[] CID, string sourceName, byte page, byte lastPage, UInt16[] universes) { var rootLayer = new RootLayer { CID = CID, Vector = RootLayerVector.VECTOR_ROOT_E131_EXTENDED }; var framingLayer = new UniverseDiscoveryPacketFramingLayer { SourceName = sourceName }; var universeDiscoveryLayer = new UniverseDiscoveryLayer { Page = page, LastPage = lastPage, Universes = universes }; int totalLength = RootLayer.Length + UniverseDiscoveryPacketFramingLayer.Length + universeDiscoveryLayer.Length; using var owner = MemoryPool <byte> .Shared.Rent(totalLength); var bytes = owner.Memory.Span.Slice(0, totalLength); rootLayer.Write(bytes, (UInt16)(SynchronizationPacketFramingLayer.Length + universeDiscoveryLayer.Length)); framingLayer.Write(bytes.Slice(RootLayer.Length), universeDiscoveryLayer.Length); universeDiscoveryLayer.Write(bytes.Slice(RootLayer.Length + UniverseDiscoveryPacketFramingLayer.Length)); return(bytes); }
public UniverseDiscoveryPacket() { RootLayer = new RootLayer { Vector = RootLayerVector.VECTOR_ROOT_E131_EXTENDED }; FramingLayer = new UniverseDiscoveryPacketFramingLayer(); UniverseDiscoveryLayer = new UniverseDiscoveryLayer(); }
public void Given_TheDataIsCorrect_When_ParseIsCalled_Then_TheDataIsParsedAsExpected() { string sourceName = "This is the source name"; var bytes = GetUniverseDiscoveryPacketFramingLayer(sourceName); var framingLayer = UniverseDiscoveryPacketFramingLayer.Parse(bytes.ToArray()); Assert.Equal(FramingLayerVector.VECTOR_E131_EXTENDED_DISCOVERY, framingLayer.Vector); Assert.Equal(sourceName, framingLayer.SourceName); }
public void Given_TheVectorIsIncorrect_When_ParseIsCalled_Then_NullIsReturned() { List <byte> bytes = new List <byte>(); bytes.AddRange(new byte[] { 0x7 << 4, UniverseDiscoveryPacketFramingLayer.Length }); // flags and length bytes.AddRange(new byte[] { 0, 0, 0, (byte)42 }); // Vector string sourceName = "This is the source name"; bytes.AddRange(Encoding.UTF8.GetBytes(sourceName)); bytes.AddRange(Enumerable.Repeat((byte)0, 64 - sourceName.Length)); bytes.AddRange(new byte[] { 0, 0, 0, 0 }); // reserved Assert.Null(UniverseDiscoveryPacketFramingLayer.Parse(bytes.ToArray())); }
public void When_WriteIsCalled_Then_TheDataIsCorrect() { string sourceName = "My source name"; var framingLayer = new UniverseDiscoveryPacketFramingLayer() { SourceName = sourceName }; var expectedBytes = GetUniverseDiscoveryPacketFramingLayer(sourceName); using var owner = MemoryPool <byte> .Shared.Rent(UniverseDiscoveryPacketFramingLayer.Length); var actualBytes = owner.Memory.Span.Slice(0, UniverseDiscoveryPacketFramingLayer.Length); framingLayer.Write(actualBytes, 0); Assert.Equal(expectedBytes.ToArray(), actualBytes.ToArray()); }
public void Given_ThePacketIsAValidUniverseDiscoveryPacket_When_ParseIsCalled_Then_ThePacketIsParsedCorrectly() { byte[] CID = Enumerable.Range(1, 12).Select(x => (byte)x).ToArray(); var rootLayer = new RootLayer { CID = CID, Vector = RootLayerVector.VECTOR_ROOT_E131_EXTENDED }; string sourceName = "Source name"; var framingLayer = new UniverseDiscoveryPacketFramingLayer { SourceName = sourceName }; UInt16[] universes = Enumerable.Range(200, 1000) .Select(x => (UInt16)x) .ToArray(); var discoveryLayer = new UniverseDiscoveryLayer { Universes = universes, Page = 25, LastPage = 25 }; int totalLength = discoveryLayer.Length + UniverseDiscoveryPacketFramingLayer.Length + RootLayer.Length; using var owner = MemoryPool <byte> .Shared.Rent(totalLength); var bytes = owner.Memory.Span.Slice(0, totalLength); rootLayer.Write(bytes, (UInt16)(UniverseDiscoveryPacketFramingLayer.Length + discoveryLayer.Length)); framingLayer.Write(bytes.Slice(RootLayer.Length), discoveryLayer.Length); discoveryLayer.Write(bytes.Slice(RootLayer.Length + UniverseDiscoveryPacketFramingLayer.Length)); var packet = SacnPacket.Parse(bytes); Assert.NotNull(packet); Assert.IsType <UniverseDiscoveryPacket>(packet); }
public static UniverseDiscoveryPacket Parse(ReadOnlySpan <byte> bytes, RootLayer rootLayer, UniverseDiscoveryPacketFramingLayer framingLayer) { UniverseDiscoveryPacket dataPacket = new UniverseDiscoveryPacket { RootLayer = rootLayer, FramingLayer = framingLayer, UniverseDiscoveryLayer = UniverseDiscoveryLayer.Parse(bytes) }; return(dataPacket); }