Esempio n. 1
0
 public GrpcServer(GrpcServerBuilder builder)
 {
     _builder = builder;
     _options = builder.Options ?? throw new ArgumentNullException("GrpcServerOption cannot be null");
     _server  = new Server();
     _server.Ports.Add(new ServerPort(_options.Host, _options.Port, ServerCredentials.Insecure));
 }
Esempio n. 2
0
        public static IServiceCollection AddKadderGrpcServer(
            this IServiceCollection services,
            Action <GrpcServerBuilder> builderAction)
        {
            var builder = new GrpcServerBuilder();

            builderAction(builder);
            services.AddSingleton <GrpcServerBuilder>(builder);
            services.RegSerializer(builder.JsonSerializer, builder.BinarySerializer);
            services.AddSingleton <GrpcHandlerBuilder>();
            services.AddSingleton <GrpcServiceBuilder>();
            services.AddSingleton <GrpcMessageServicer>();
            foreach (var item in builder.Middlewares)
            {
                Middlewares.GrpcHandlerDirector.AddMiddleware(item);
            }

            var provider = services.BuildServiceProvider();

            GrpcServerBuilder.ServiceProvider = provider;
            var serviceBuilder = provider.GetService <GrpcServiceBuilder>();

            var namespaces  = "Kadder.CodeGeneration";
            var codeBuilder = new CodeBuilder(namespaces, namespaces);
            var grpcCode    = serviceBuilder.GenerateGrpcProxy(
                builder.Options, codeBuilder);
            var proxyCode = serviceBuilder.GenerateHandlerProxy(
                builder.Options.GetScanAssemblies(), codeBuilder);
            var codeAssembly = codeBuilder.BuildAsync().Result;

            namespaces = $"{proxyCode.Namespace}.{proxyCode.Name}";
            var proxy = (IMessageServicerProxy)codeAssembly.Assembly
                        .CreateInstance(namespaces);

            services.AddSingleton <IMessageServicerProxy>(proxy);

            namespaces = $"{grpcCode.Namespace}.{grpcCode.Name}";
            var grpcType = codeAssembly.Assembly.GetType(namespaces);

            services.AddSingleton(typeof(IGrpcServices), grpcType);
            services.AddSingleton <GrpcServer>();

            return(services);
        }
Esempio n. 3
0
        public static IServiceCollection AddKadderGrpcServer(
            this IServiceCollection services, Action <GrpcServerBuilder> builderAction)
        {
            var builder = new GrpcServerBuilder();

            builderAction(builder);
            var serviceBuilder = new GrpcServiceBuilder();

            services.AddSingleton(builder);
            services.RegSerializer(builder.JsonSerializer, builder.BinarySerializer);
            services.AddSingleton <GrpcHandlerBuilder>();
            services.AddSingleton(serviceBuilder);
            services.AddSingleton <GrpcMessageServicer>();
            foreach (var item in builder.Middlewares)
            {
                Middlewares.GrpcHandlerDirector.AddMiddleware(item);
            }
            foreach (var interceptor in builder.Interceptors)
            {
                services.AddSingleton(interceptor);
            }

            var namespaces  = "Kadder.CodeGeneration";
            var codeBuilder = new CodeBuilder(namespaces, namespaces);
            var grpcClasses = serviceBuilder.GenerateGrpcProxy(builder.Options, codeBuilder);
            // var proxyCode = serviceBuilder.GenerateHandlerProxy(builder.Options.GetScanAssemblies(), codeBuilder);
            var codeAssembly = codeBuilder.BuildAsync().Result;

            foreach (var grpcClass in grpcClasses)
            {
                namespaces = $"{grpcClass.Namespace}.{grpcClass.Name}";
                var grpcType = codeAssembly.Assembly.GetType(namespaces);
                services.AddSingleton(grpcType);
                builder.Services.Add(grpcType);
            }
            services.AddSingleton <GrpcServer>();

            return(services);
        }