Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        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);
        }