public static void DoClientStreaming <TRequest, TResponse>( Func <CallOptions, AsyncClientStreamingCall <TRequest, TResponse> > requestAction, string requestValue, CancellationTokenSource cancellationTokenSource, JsonSerializerOptions options, Func <string, Task> responseAction, IGrpcMetadataProvider metadataProvider) { ExecuteAndLogError(async() => { var clientStreamingCall = requestAction(new CallOptions(headers: metadataProvider.GetMetadata(), cancellationToken: cancellationTokenSource.Token)); var requests = JsonSerializer.Deserialize <List <TRequest> >(requestValue); var requestStream = clientStreamingCall.RequestStream; foreach (var request in requests) { await requestStream.WriteAsync(request); await Task.Delay(200); } await requestStream.CompleteAsync(); var response = await clientStreamingCall; await responseAction(JsonSerializer.Serialize(response, options)); }, responseAction); }
public static void DoDuplexStreaming <TRequest, TResponse>( Func <CallOptions, AsyncDuplexStreamingCall <TRequest, TResponse> > requestAction, string requestValue, CancellationTokenSource cancellationTokenSource, JsonSerializerOptions options, Func <string> responseValueGetter, Func <string, Task> responseAction, IGrpcMetadataProvider metadataProvider) { ExecuteAndLogError(async() => { var requests = JsonSerializer.Deserialize <List <TRequest> >(requestValue); var duplexCall = requestAction(new CallOptions(headers: metadataProvider.GetMetadata(), cancellationToken: cancellationTokenSource.Token)); var clientStream = duplexCall.RequestStream; var serverStream = duplexCall.ResponseStream; foreach (var request in requests) { await clientStream.WriteAsync(request); await Task.Delay(200); } await clientStream.CompleteAsync(); while (await serverStream.MoveNext(cancellationTokenSource.Token)) { await responseAction($"{responseValueGetter()}{Environment.NewLine}{JsonSerializer.Serialize(serverStream.Current, options)}"); } }, responseAction); }
public static void DoUnaryCall <TRequest, TResponse>( Func <TRequest, CallOptions, AsyncUnaryCall <TResponse> > requestAction, string requestValue, CancellationTokenSource cancellationTokenSource, JsonSerializerOptions options, Func <string, Task> responseAction, IGrpcMetadataProvider metadataProvider) { ExecuteAndLogError(async() => { var response = await requestAction( JsonSerializer.Deserialize <TRequest>(requestValue), new CallOptions(headers: metadataProvider.GetMetadata(), cancellationToken: cancellationTokenSource.Token)); await responseAction(JsonSerializer.Serialize(response, options)); }, responseAction); }
public static void DoServerStreaming <TRequest, TResponse>( Func <TRequest, CallOptions, AsyncServerStreamingCall <TResponse> > requestAction, string requestValue, CancellationTokenSource cancellationTokenSource, JsonSerializerOptions options, Func <string> responseValueGetter, Func <string, Task> responseAction, IGrpcMetadataProvider metadataProvider) { ExecuteAndLogError(async() => { var request = JsonSerializer.Deserialize <TRequest>(requestValue); var serverStream = requestAction(request, new CallOptions(headers: metadataProvider.GetMetadata(), cancellationToken: cancellationTokenSource.Token)).ResponseStream; while (await serverStream.MoveNext(cancellationTokenSource.Token)) { await responseAction($"{responseValueGetter()}{Environment.NewLine}{JsonSerializer.Serialize(serverStream.Current, options)}"); } }, responseAction); }