示例#1
0
        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());
        }
示例#6
0
        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);
        }