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); } }
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)); }