public override AsyncServerStreamingCall<TResponse> AsyncServerStreamingCall<TRequest, TResponse>(
TRequest request, ClientInterceptorContext<TRequest, TResponse> context,
AsyncServerStreamingCallContinuation<TRequest, TResponse> continuation)
{
var cancellationToken = context.Options.CancellationToken;
var token = Task.Run(() => GetAccessTokenAsync(cancellationToken), cancellationToken).Result;
if (token.IsMissing())
if (Task.Run(() => RefreshTokensAsync(cancellationToken), cancellationToken).Result == false)
_logger.Warn("Unable to refresh access token");
AddOrUpdateHeader(context.Options.Headers, CreateBearerTokenHeader(token));
try
{
return continuation(request, context);
}
catch (RpcException e) when (e.StatusCode == StatusCode.Unauthenticated)
{
if (Task.Run(() => RefreshTokensAsync(cancellationToken), cancellationToken).Result == false)
_logger.Warn("Unable to refresh access token");
AddOrUpdateHeader(context.Options.Headers, CreateBearerTokenHeader(AccessToken));
return continuation(request, context);
}
}var responseContinuation = continuation(request, context);
try
{
// Any way to raise an exception when call is StatusCode=Unauthenticated here?
responseContinuation.ResponseHeadersAsync.WaitAndUnwrapException();
return new AsyncServerStreamingCall<TResponse>(
responseContinuation.ResponseStream,
responseContinuation.ResponseHeadersAsync,
responseContinuation.GetStatus,
responseContinuation.GetTrailers,
responseContinuation.Dispose);
}
catch (RpcException e) when (e.StatusCode == StatusCode.Unauthenticated)
{
if (Task.Run(() => RefreshTokensAsync(cancellationToken), cancellationToken).Result == false)
_logger.Warn("Unable to refresh access token");
AddOrUpdateHeader(context.Options.Headers, CreateBearerTokenHeader(AccessToken));
return continuation(request, context);
}