コード例 #1
0
        public async Task Service_uses_internal_client_for_client_streaming_requests([Frozen] Greeter.GreeterClient client, Service sut, [Frozen] HelloReply reply, AsyncClientStreamingCall <HelloRequest, HelloReply> responseCall, string[] names)
        {
            Mock.Get(client).Setup(p => p.SayHelloClientStream(null, null, default)).Returns(responseCall);

            var response = await sut.StreamHellos(names);

            Assert.That(response, Is.EqualTo(reply.Message));
        }
コード例 #2
0
        /// <summary>
        /// 全てのリクエストを送信します。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <typeparam name="TResult">実行結果の型</typeparam>
        /// <param name="call">呼び出しオブジェクト</param>
        /// <param name="requests">リクエストを取得する処理</param>
        /// <param name="converter">実行結果への変換処理</param>
        /// <returns>実行結果</returns>
        public static async Task <GrpcResult <TResult> > WriteAndCompleteAsync <TRequest, TResponse, TResult>(this AsyncClientStreamingCall <TRequest, TResponse> call, IEnumerable <AsyncFunc <TRequest> > requests, Converter <TResponse, TResult> converter)
            where TRequest : class where TResponse : class
        {
            try
            {
                foreach (AsyncFunc <TRequest> request in requests)
                {
                    await call.RequestStream.WriteAsync(await request().ConfigureAwait(false)).ConfigureAwait(false);
                }

                await CompleteAsyncInternal(call).ConfigureAwait(false);

                return(GrpcResult.Create <TResult>(converter(await call.ResponseAsync.ConfigureAwait(false)), call.ToInterface()));
            }
            catch (Exception ex) when(GrpcExceptionUtility.HasRpcException(ex))
            {
                return(HandleResponseException <TRequest, TResponse, TResult>(call, ex));
            }
        }
コード例 #3
0
        /// <summary>
        /// Write the specified requests and send a completion.
        /// </summary>
        /// <typeparam name="TRequest">The type of the request.</typeparam>
        /// <typeparam name="TResponse">The type of the response.</typeparam>
        /// <param name="call"></param>
        /// <param name="requests">The requests.</param>
        /// <returns>The response.</returns>
        public static async Task <TResponse> WriteRequestsAndCompleteAsync <TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call, IEnumerable <Task <TRequest> > requests)
        {
            await call.RequestStream.WriteRequestsAsync(requests).ConfigureAwait(false);

            await call.RequestStream.CompleteAsync().ConfigureAwait(false);

            return(await call.ResponseAsync.ConfigureAwait(false));
        }
コード例 #4
0
 /// <summary>
 /// Converts the request type.
 /// </summary>
 /// <typeparam name="TSource">The type before conversion.</typeparam>
 /// <typeparam name="TRequest">The type of the request.</typeparam>
 /// <typeparam name="TResponse">The type of the response.</typeparam>
 /// <param name="call"></param>
 /// <param name="requestConverter">Method to convert a request.</param>
 /// <returns>A streaming call with request type converted.</returns>
 public static AsyncClientStreamingCall <TSource, TResponse> ConvertRequest <TSource, TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call, Func <TSource, TRequest> requestConverter)
 {
     return(new AsyncClientStreamingCall <TSource, TResponse>(
                call.RequestStream.ConvertRequest(requestConverter)
                , call.ResponseAsync
                , call.ResponseHeadersAsync
                , call.GetStatus
                , call.GetTrailers
                , call.Dispose
                ));
 }
コード例 #5
0
        /// <summary>
        /// Converts the request type.
        /// </summary>
        /// <typeparam name="TSource">The type before conversion.</typeparam>
        /// <typeparam name="TRequest">The type of the request.</typeparam>
        /// <typeparam name="TResponse">The type of the response.</typeparam>
        /// <typeparam name="TResult">The type after conversion.</typeparam>
        /// <param name="call"></param>
        /// <param name="requestConverter">Method to convert a request.</param>
        /// <param name="responseConverter">Method to convert a response.</param>
        /// <returns>A streaming call with request type converted.</returns>
        public static AsyncClientStreamingCall <TSource, TResult> ConvertRequestResponse <TSource, TRequest, TResponse, TResult>(this AsyncClientStreamingCall <TRequest, TResponse> call, Func <TSource, Task <TRequest> > requestConverter, Func <TResponse, Task <TResult> > responseConverter)
        {
            async Task <TResult> convert(Task <TResponse> response, Func <TResponse, Task <TResult> > converter)
            {
                return(await converter(await response.ConfigureAwait(false)).ConfigureAwait(false));
            }

            return(new AsyncClientStreamingCall <TSource, TResult>(
                       call.RequestStream.ConvertRequest(requestConverter)
                       , convert(call.ResponseAsync, responseConverter)
                       , call.ResponseHeadersAsync
                       , call.GetStatus
                       , call.GetTrailers
                       , call.Dispose
                       ));
        }
コード例 #6
0
 /// <summary>
 /// Writes the specified requests.
 /// </summary>
 /// <typeparam name="TRequest">The type of the request.</typeparam>
 /// <typeparam name="TResponse">The type of the response.</typeparam>
 /// <param name="call"></param>
 /// <param name="requests">The requests.</param>
 /// <returns></returns>
 public static Task WriteRequestsAsync <TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call, IEnumerable <Task <TRequest> > requests)
 {
     return(call.RequestStream.WriteRequestsAsync(requests));
 }
コード例 #7
0
 /// <summary>
 /// 指定されたメソッド呼び出しの状態を取得します。
 /// </summary>
 /// <typeparam name="TRequest">リクエストの型</typeparam>
 /// <typeparam name="TResponse">レスポンスの型</typeparam>
 /// <param name="call">呼び出しオブジェクト</param>
 /// <param name="state">状態オブジェクト</param>
 /// <returns>取得できた場合、true を返します。</returns>
 internal static bool TryGetState <TRequest, TResponse>(AsyncClientStreamingCall <TRequest, TResponse> call, out GrpcCallState state)
 {
     return(TryGetStateMain(call, out state));
 }
コード例 #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="call"></param>
 internal AsyncClientStreamingCallWrapper(AsyncClientStreamingCall <TRequest, TResponse> call)
 {
     m_Call = call;
 }
コード例 #9
0
 private static async Task ClientStreamingOperation(StatsService.StatsServiceClient client)
 {
     AsyncClientStreamingCall <SingleNumber, AverageResponse> call = client.AverageStreaming(default);
コード例 #10
0
        /// <summary>
        /// 指定されたメソッド呼び出しを登録します。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <param name="call">呼び出しオブジェクト</param>
        /// <param name="method">メソッド</param>
        /// <param name="host">ホスト</param>
        /// <param name="options">オプション</param>
        /// <param name="performanceListener">パフォーマンスリスナー</param>
        /// <returns>呼び出しオブジェクト</returns>
        internal static AsyncClientStreamingCall <TRequest, TResponse> Regist <TRequest, TResponse>(AsyncClientStreamingCall <TRequest, TResponse> call, Method <TRequest, TResponse> method, string host, CallOptions options, GrpcClientPerformanceListener performanceListener)
        {
            GrpcCallInvokerContext.Releaser releaser = new GrpcCallInvokerContext.Releaser(delegate()
            {
                call.Dispose();
            });

            GrpcCallState state = new GrpcCallState(method, host, options);

            AsyncClientStreamingCall <TRequest, TResponse> wrap = new AsyncClientStreamingCall <TRequest, TResponse>(
                new RequestStreamWriter <TRequest>(call.RequestStream, method, host, options, state.OnRequestStreamCompleted, performanceListener)
                , call.ResponseAsync
                , call.ResponseHeadersAsync
                , call.GetStatus
                , call.GetTrailers
                , releaser.Dispose
                );

            releaser.Target = wrap;

            GrpcCallInvokerContext.AddState(wrap, state);

            return(wrap);
        }
コード例 #11
0
 public ClientStreamingResult(AsyncClientStreamingCall <byte[], byte[]> inner, Marshaller <TRequest> requestMarshaller, Marshaller <TResponse> responseMarshaller)
 {
     this.inner              = inner;
     this.requestStream      = new MarshallingClientStreamWriter <TRequest>(inner.RequestStream, requestMarshaller);
     this.responseMarshaller = responseMarshaller;
 }
コード例 #12
0
 public static IAsyncResponseCall <TResponse> AsResponseCall <TRequest, TResponse>(this AsyncClientStreamingCall <TRequest, TResponse> call)
 {
     if (call == null)
     {
         return(null);
     }
     return(new AsyncClientStreamingCallWrapper <TRequest, TResponse>(call));
 }
コード例 #13
0
 internal void SetAsyncClientStreamingCall(AsyncClientStreamingCall <TRequest, TResponse> call) => this.AsyncClientStreamingCall = call;
コード例 #14
0
 public PiCarClient(PiCar.PiCarClient client)
 {
     _client           = client;
     remoteControlCall = _client.RemoteControl();
 }
コード例 #15
0
        /// <summary>
        /// Invokes AsyncClientStreamingCall without type restrictions.
        /// </summary>
        /// <typeparam name="TRequest">The type of the request.</typeparam>
        /// <typeparam name="TResponse">The type of the response.</typeparam>
        /// <param name="callInvoker"></param>
        /// <param name="method"></param>
        /// <param name="host"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static AsyncClientStreamingCall <TRequest, TResponse> StructAsyncClientStreamingCall <TRequest, TResponse>(this CallInvoker callInvoker, Method <TRequest, TResponse> method, string host, CallOptions options)
        {
            AsyncClientStreamingCall <byte[], byte[]> call = callInvoker.AsyncClientStreamingCall(s_StructMethodCache.GetMethod(method), host, options);

            return(call.ConvertRequestResponse(method.RequestMarshaller.Serializer, method.ResponseMarshaller.Deserializer));
        }