예제 #1
0
        public static SacnPacket Parse(ReadOnlySpan <byte> bytes)
        {
            RootLayer rootLayer = RootLayer.Parse(bytes);

            if (rootLayer == null)
            {
                return(null);
            }
            bytes = bytes.Slice(RootLayer.Length);

            FramingLayer framingLayer = FramingLayer.Parse(bytes, rootLayer.Vector);

            switch (framingLayer)
            {
            case DataPacketFramingLayer dataLayer:
                bytes = bytes.Slice(DataPacketFramingLayer.Length);
                return(DataPacket.Parse(bytes, rootLayer, dataLayer));

            case SynchronizationPacketFramingLayer syncLayer:
                bytes = bytes.Slice(SynchronizationPacketFramingLayer.Length);
                return(SynchronizationPacket.Parse(bytes, rootLayer, syncLayer));

            case UniverseDiscoveryPacketFramingLayer discoveryLayer:
                bytes = bytes.Slice(UniverseDiscoveryPacketFramingLayer.Length);
                return(UniverseDiscoveryPacket.Parse(bytes, rootLayer, discoveryLayer));

            default:
                return(null);
            }
        }
예제 #2
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));
 }
 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));
 }