private void EncodeTextMessage(WebSocketPackage package) { var encoder = _encoding.GetEncoder(); var text = package.Message.AsSpan(); var completed = false; var outputStream = new WritableSequenceStream(); using (var stream = new DeflateStream(outputStream, CompressionMode.Compress)) { while (!completed) { var buffer = _arrayPool.Rent(_deflateBufferSize); Span <byte> span = buffer; encoder.Convert(text, span, false, out int charsUsed, out int bytesUsed, out completed); if (charsUsed > 0) { text = text.Slice(charsUsed); } stream.Write(buffer, 0, bytesUsed); } stream.Flush(); } package.Data = outputStream.GetUnderlyingSequqnce(); }
private void EncodeDataMessage(WebSocketPackage package) { var data = package.Data; RemoveLastFourOctets(ref data); var outputStream = new WritableSequenceStream(); using (var stream = new DeflateStream(outputStream, CompressionMode.Compress)) { foreach (var piece in data) { stream.Write(piece.Span); } stream.Flush(); } package.Data = outputStream.GetUnderlyingSequqnce(); }