private void WriteMultiplePackages(Stream stream, string[] lines)
        {
            var pool   = ArrayPool <byte> .Shared;
            var buffer = pool.Rent(lines.Sum(x => 3 + Utf8Encoding.GetMaxByteCount(x.Length)));

            Span <byte> span = buffer;

            var total = 0;

            foreach (var line in lines)
            {
                var pack = EncodePackage(line, span);
                span   = span.Slice(pack.Length);
                total += pack.Length;
            }

            span = new Span <byte>(buffer, 0, total);

            var rd    = new Random();
            var maxRd = total / 2;

            while (span.Length > 0)
            {
                var size = rd.Next(1, maxRd);
                size = Math.Min(size, span.Length);

                stream.Write(span.Slice(0, size));
                stream.Flush();

                span = span.Slice(size);
            }

            pool.Return(buffer);
        }
        private void WriteHalfPackage(Stream stream, string line)
        {
            var pool   = ArrayPool <byte> .Shared;
            var buffer = pool.Rent(3 + Utf8Encoding.GetMaxByteCount(line.Length));
            var pack   = EncodePackage(line, buffer);

            stream.Write(pack.Slice(0, pack.Length / 2));
            pool.Return(buffer);
        }
        private void WriteFragmentPackage(Stream stream, string line)
        {
            var pool   = ArrayPool <byte> .Shared;
            var buffer = pool.Rent(3 + Utf8Encoding.GetMaxByteCount(line.Length));
            var pack   = EncodePackage(line, buffer);

            for (var i = 0; i < pack.Length; i++)
            {
                stream.Write(buffer, i, 1);
                stream.Flush();
                Thread.Sleep(50);
            }

            pool.Return(buffer);
        }