示例#1
0
        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.GetUnderlyingSequence();
        }
示例#2
0
        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.GetUnderlyingSequence();
        }