in src/DotPulsar/Internal/ChunkingPipeline.cs [37:80]
public async ValueTask Send(ReadOnlySequence<byte> sequence)
{
var sequenceLength = sequence.Length;
if (sequenceLength <= _chunkSize)
{
CopyToBuffer(sequence);
_bufferCount = (int) sequenceLength;
await SendBuffer().ConfigureAwait(false);
return;
}
var enumerator = sequence.GetEnumerator();
var hasNext = true;
while (hasNext)
{
var current = enumerator.Current;
var currentLength = current.Length;
hasNext = enumerator.MoveNext();
if (currentLength > _chunkSize)
{
await Send(current).ConfigureAwait(false);
continue;
}
var total = currentLength + _bufferCount;
if (total > _chunkSize)
await SendBuffer().ConfigureAwait(false);
if (_bufferCount != 0 || (hasNext && enumerator.Current.Length + total <= _chunkSize))
{
CopyToBuffer(current);
_bufferCount = total;
continue;
}
await Send(current).ConfigureAwait(false);
}
await SendBuffer().ConfigureAwait(false);
}