internal override unsafe Channel.OfferParameters DeserializeOfferParameters(ReadOnlySequence <byte> payload) { ReadOnlySpan <byte> nameSlice = payload.IsSingleSegment ? payload.First.Span : payload.ToArray(); fixed(byte *pName = nameSlice) { return(new Channel.OfferParameters( pName != null ? ControlFrameEncoding.GetString(pName, nameSlice.Length) : string.Empty, null)); } }
internal override unsafe ReadOnlySequence <byte> Serialize(Channel.OfferParameters offerParameters) { var sequence = new Sequence <byte>(); var buffer = sequence.GetSpan(ControlFrameEncoding.GetMaxByteCount(offerParameters.Name.Length)); fixed(byte *pBuffer = buffer) { fixed(char *pName = offerParameters.Name) { int byteLength = ControlFrameEncoding.GetBytes(pName, offerParameters.Name.Length, pBuffer, buffer.Length); sequence.Advance(byteLength); } } return(sequence); }