/// <summary> /// ラップ対象オブジェクトとメソッド情報を指定してインスタンスを生成します。 /// </summary> /// <param name="target">ラップ対象オブジェクト</param> /// <param name="method">メソッド</param> /// <param name="host">ホスト</param> /// <param name="options">オプション</param> /// <param name="onEndResponse"></param> /// <param name="performanceListener">パフォーマンスリスナー</param> internal ResponseStreamReader(IAsyncStreamReader <TResponse> target, IMethod method, string host, CallOptions options, Action onEndResponse, GrpcClientPerformanceListener performanceListener) { m_Target = target; m_Method = method; m_Host = host; m_Options = options; m_OnEndResponse = onEndResponse; m_PerformanceListener = performanceListener; }
/// <summary> /// /// </summary> /// <param name="target"></param> /// <param name="method"></param> /// <param name="host"></param> /// <param name="options"></param> /// <param name="onCompleted"></param> /// <param name="performanceListener"></param> internal RequestStreamWriter(IClientStreamWriter <TRequest> target, IMethod method, string host, CallOptions options, Action onCompleted, GrpcClientPerformanceListener performanceListener) { m_Target = target; m_Method = method; m_Host = host; m_Options = options; m_OnCompleted = onCompleted; m_PerformanceListener = performanceListener; }
/// <summary> /// /// </summary> private void RegistPerformanceEventHandlers(GrpcClientPerformanceListener listener) { listener.Serialized += PerformanceListener_Serialized; listener.Deserialized += PerformanceListener_Deserialized; listener.MethodCalling += PerformanceListener_MethodCalling; listener.MethodCalled += PerformanceListener_MethodCalled; listener.MethodIntercepted += PerformanceListener_MethodIntercepted; listener.RequestWriting += PerformanceListener_RequestWriting; listener.RequestWrote += PerformanceListener_RequestWrote; listener.ResponseReading += PerformanceListener_ResponseReading; listener.ResponseReaded += PerformanceListener_ResponseReaded; }
/// <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 AsyncDuplexStreamingCall <TRequest, TResponse> Regist <TRequest, TResponse>(AsyncDuplexStreamingCall <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); AsyncDuplexStreamingCall <TRequest, TResponse> wrap = new AsyncDuplexStreamingCall <TRequest, TResponse>( new RequestStreamWriter <TRequest>(call.RequestStream, method, host, options, state.OnRequestStreamCompleted, performanceListener) , new ResponseStreamReader <TResponse>(call.ResponseStream, method, host, options, state.OnEndResponse, performanceListener) , call.ResponseHeadersAsync , call.GetStatus , call.GetTrailers , releaser.Dispose ); releaser.Target = wrap; GrpcCallInvokerContext.AddState(wrap, state); return(wrap); }