コード例 #1
0
 /// <summary>
 /// サービスメソッドを追加します。
 /// </summary>
 /// <param name="builder">サービスビルダー</param>
 /// <param name="context">コンテキスト</param>
 private void AddServiceMethod(ServerServiceDefinition.Builder builder, MethodBuildContext context)
 {
     typeof(GrpcServiceBuilder).GetMethod("AddServiceMethodGeneric", BindingFlags.Instance | BindingFlags.NonPublic)
     .MakeGenericMethod(new Type[] { context.RequestType, context.ResponseType })
     .Invoke(this, new object[] { builder, context });
 }
コード例 #2
0
        /// <summary>
        /// サービスメソッドを追加します。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <param name="builder">サービスビルダー</param>
        /// <param name="context">コンテキスト</param>
        private void AddServiceMethodGeneric <TRequest, TResponse>(ServerServiceDefinition.Builder builder, MethodBuildContext context)
            where TRequest : class where TResponse : class
        {
            Method <TRequest, TResponse> method = CreateServiceMethodFieldGeneric <TRequest, TResponse>(context);

            switch (method.Type)
            {
            case MethodType.Unary:

                builder.AddMethod <TRequest, TResponse>(method, CreateUnaryServerMethod <TRequest, TResponse>(context));
                break;

            case MethodType.ClientStreaming:

                builder.AddMethod <TRequest, TResponse>(method, CreateClientStreamingServerMethod <TRequest, TResponse>(context));
                break;

            case MethodType.ServerStreaming:

                builder.AddMethod <TRequest, TResponse>(method, CreateServerStreamingServerMethod <TRequest, TResponse>(context));
                break;

            case MethodType.DuplexStreaming:

                builder.AddMethod <TRequest, TResponse>(method, CreateDuplexStreamingServerMethod <TRequest, TResponse>(context));
                break;
            }
        }
コード例 #3
0
        /// <summary>
        /// サービスメソッド定義を生成します。
        /// </summary>
        /// <typeparam name="TRequest">リクエストの型</typeparam>
        /// <typeparam name="TResponse">レスポンスの型</typeparam>
        /// <param name="context">コンテキスト</param>
        /// <returns>サービスメソッド定義></returns>
        private Method <TRequest, TResponse> CreateServiceMethodFieldGeneric <TRequest, TResponse>(MethodBuildContext context)
        {
            string serviceName = context.GetServiceName();
            string methodName  = context.GetServiceMethodName();

            GrpcServerPerformanceListener performanceListener = context.NeedNotifyPerformanceLog ? context.Settings.PerformanceListener : null;

            Marshaller <TRequest>  request  = CreateMethodMarshaller <TRequest>(serviceName, methodName, performanceListener, context.Settings);
            Marshaller <TResponse> response = CreateMethodMarshaller <TResponse>(serviceName, methodName, performanceListener, context.Settings);

            return(new Method <TRequest, TResponse>(context.MethodType, serviceName, methodName, request, response));
        }