Esempio n. 1
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);
        }
        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());
        }