Files
NugetSecretCredential/RequestHandlerBase.cs
2025-03-20 22:24:55 +01:00

40 lines
1.3 KiB
C#

using System;
using NuGet.Protocol.Plugins;
namespace NugetSecretCredential;
internal abstract class RequestHandlerBase<TRequest, TResponse> : IRequestHandler
where TResponse : class
{
protected RequestHandlerBase()
{
}
CancellationToken IRequestHandler.CancellationToken => default;
public IConnection? Connection { get; private set; }
public virtual CancellationToken CancellationToken { get; private set; } = CancellationToken.None;
public async Task HandleResponseAsync(IConnection connection, Message message, IResponseHandler responseHandler, CancellationToken cancel)
{
Connection = connection;
TRequest request = MessageUtilities.DeserializePayload<TRequest>(message);
TResponse? response = null;
using (GetProgressReporter(connection, message, cancel))
{
response = await HandleRequestAsync(request, cancel);
}
// If we did not send a cancel message, we must submit the response even if cancellationToken is canceled.
await responseHandler.SendResponseAsync(message, response, CancellationToken.None);
}
public abstract Task<TResponse> HandleRequestAsync(TRequest request, CancellationToken cancel);
protected virtual AutomaticProgressReporter? GetProgressReporter(IConnection connection, Message message, CancellationToken cancel)
{
return null;
}
}