/// <summary> /// 指定されたメソッド呼び出しの状態を追加します。 /// </summary> /// <param name="call">呼び出しオブジェクト</param> /// <param name="state">状態オブジェクト</param> private static void AddState(object call, GrpcCallState state) { lock (s_Calls) { s_Calls[call] = state; } }
/// <summary> /// 指定されたメソッド呼び出しの状態を取得します。 /// </summary> /// <param name="call">呼び出しオブジェクト</param> /// <param name="state">状態オブジェクト</param> /// <returns>取得できた場合、true を返します。</returns> internal static bool TryGetStateMain(object call, out GrpcCallState state) { lock (s_Calls) { return(s_Calls.TryGetValue(call, out state)); } }
/// <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 AsyncServerStreamingCall <TResponse> Regist <TRequest, TResponse>(AsyncServerStreamingCall <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); AsyncServerStreamingCall <TResponse> wrap = new AsyncServerStreamingCall <TResponse>( 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); }
/// <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>(AsyncDuplexStreamingCall <TRequest, TResponse> call, out GrpcCallState state) { return(TryGetStateMain(call, out state)); }
/// <summary> /// 指定されたメソッド呼び出しの状態を取得します。 /// </summary> /// <param name="call">呼び出しオブジェクト</param> /// <param name="state">状態オブジェクト</param> /// <returns>取得できた場合、true を返します。</returns> internal static bool TryGetState <TResponse>(AsyncUnaryCall <TResponse> call, out GrpcCallState state) { return(TryGetStateMain(call, out state)); }