示例#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);
        }
示例#2
0
        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);
        }
示例#3
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);
        }
示例#4
0
        public void When_WriteIsCalled_Then_TheDataIsCorrect()
        {
            var expectedCid = new byte[]
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
            };
            var expectedVector = RootLayerVector.VECTOR_ROOT_E131_DATA;
            var expectedBytes  = GetRootLayer(expectedCid, expectedVector);

            RootLayer rootLayer = new RootLayer()
            {
                CID    = expectedCid,
                Vector = RootLayerVector.VECTOR_ROOT_E131_DATA
            };

            using var owner = MemoryPool <byte> .Shared.Rent(RootLayer.Length);

            var actualBytes = owner.Memory.Span.Slice(0, RootLayer.Length);

            rootLayer.Write(actualBytes, 0);
            Assert.Equal(expectedBytes, actualBytes.ToArray());
        }
示例#5
0
        public static Span <byte> GetSynchronizationPacket(byte[] CID, byte sequenceNumber)
        {
            var rootLayer = new RootLayer
            {
                CID    = CID,
                Vector = RootLayerVector.VECTOR_ROOT_E131_EXTENDED
            };

            var framingLayer = new SynchronizationPacketFramingLayer
            {
                SequenceNumber = sequenceNumber
            };

            int totalLength = SynchronizationPacketFramingLayer.Length + RootLayer.Length;

            using var owner = MemoryPool <byte> .Shared.Rent(totalLength);

            var bytes = owner.Memory.Span.Slice(0, totalLength);

            rootLayer.Write(bytes, (UInt16)(SynchronizationPacketFramingLayer.Length));
            framingLayer.Write(bytes.Slice(RootLayer.Length));

            return(bytes);
        }
示例#6
0
 public override void Write(Span <byte> bytes)
 {
     RootLayer.Write(bytes, (UInt16)(DataPacketFramingLayer.Length + DMPLayer.Length));
     FramingLayer.Write(bytes.Slice(RootLayer.Length), (UInt16)(DMPLayer.Length));
     DMPLayer.Write(bytes.Slice(RootLayer.Length + DataPacketFramingLayer.Length));
 }
示例#7
0
 public override void Write(Span <byte> bytes)
 {
     RootLayer.Write(bytes, SynchronizationPacketFramingLayer.Length);
     FramingLayer.Write(bytes.Slice(RootLayer.Length));
 }
 public override void Write(Span <byte> bytes)
 {
     RootLayer.Write(bytes, (UInt16)(UniverseDiscoveryPacketFramingLayer.Length + UniverseDiscoveryLayer.Length));
     FramingLayer.Write(bytes.Slice(RootLayer.Length), UniverseDiscoveryLayer.Length);
     UniverseDiscoveryLayer.Write(bytes.Slice(RootLayer.Length + UniverseDiscoveryPacketFramingLayer.Length));
 }