All checks were successful
DCO / DCO (pull_request) Successful in 47s
Signed-off-by: Pavel Gross <p.gross@yadro.com>
38 lines
915 B
C#
38 lines
915 B
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
using FrostFS.Object;
|
|
|
|
using Grpc.Core;
|
|
|
|
namespace FrostFS.SDK.ClientV2;
|
|
|
|
public sealed class RangeReader(AsyncServerStreamingCall<GetRangeResponse> call) : IObjectReader
|
|
{
|
|
private bool disposed;
|
|
|
|
public AsyncServerStreamingCall<GetRangeResponse> Call { get; private set; } = call;
|
|
|
|
public async ValueTask<ReadOnlyMemory<byte>?> ReadChunk(CancellationToken cancellationToken = default)
|
|
{
|
|
if (!await Call.ResponseStream.MoveNext(cancellationToken).ConfigureAwait(false))
|
|
return null;
|
|
|
|
var response = Call.ResponseStream.Current;
|
|
Verifier.CheckResponse(response);
|
|
|
|
return response.Body.Chunk.Memory;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (!disposed)
|
|
{
|
|
Call?.Dispose();
|
|
GC.SuppressFinalize(this);
|
|
|
|
disposed = true;
|
|
}
|
|
}
|
|
}
|