Ejemplo n.º 1
0
        private ClassDescripter generate(Type servicerType)
        {
            var classDescripter = generateClass(servicerType);

            generateField(ref classDescripter);
            generateConstructor(ref classDescripter);

            var grpcMethods = ServicerHelper.GetMethod(servicerType);

            foreach (var method in grpcMethods)
            {
                classDescripter.CreateMember(generateMethod(ref classDescripter, method));
            }
            classDescripter.CreateMember(generateBindServicesMethod(ref classDescripter));

            return(classDescripter);
        }
Ejemplo n.º 2
0
        internal Client Build()
        {
            var proxyers = new List <GrpcProxyer>();

            foreach (var proxyerOptions in ProxyerOptions)
            {
                foreach (var assemblyName in proxyerOptions.AssemblyNames)
                {
                    proxyerOptions.AddAssembly(Assembly.Load(assemblyName));
                }
                proxyerOptions.Interceptors.AddRange(GlobalInterceptors);

                var servicerType = ServicerHelper.GetServicerTypes(proxyerOptions.Assemblies);
                proxyers.Add(new GrpcProxyer(servicerType, proxyerOptions));
                Assemblies.AddRange(proxyerOptions.Assemblies);
            }
            return(new Client(proxyers, ProxyerOptions));
        }
Ejemplo n.º 3
0
        public static IHostBuilder UseGrpcServer(this IHostBuilder hostBuilder, Action <HostBuilderContext, IServiceCollection, GrpcServerBuilder> builderAction = null, string configurationKeyName = "GrpcServer")
        {
            hostBuilder.ConfigureServices((context, services) =>
            {
                var log = services.BuildServiceProvider().GetService <ILogger <GrpcServerBuilder> >();

                var builder = context.Configuration.GetSection(configurationKeyName).Get <GrpcServerBuilder>() ?? new GrpcServerBuilder();
                builderAction?.Invoke(context, services, builder);

                var server = new Server(builder.Options.ChannelOptions);
                foreach (var port in builder.Options.Ports)
                {
                    server.Ports.Add(new ServerPort(port.Host, port.Port, port.Credentials));
                }
                foreach (var interceptor in builder.Interceptors)
                {
                    services.AddSingleton(interceptor);
                }

                foreach (var assemblyName in builder.AssemblyNames)
                {
                    builder.Assemblies.Add(Assembly.Load(assemblyName));
                }
                builder.Assemblies.Add(Assembly.GetEntryAssembly());

                if (log.IsEnabled(LogLevel.Debug))
                {
                    log.LogDebug(builder.ToString());
                }

                var servicerTypes = ServicerHelper.GetServicerTypes(builder.Assemblies);
                if (servicerTypes == null || servicerTypes.Count == 0)
                {
                    throw new ArgumentNullException("Not found any grpc servicer!");
                }

                var servicerProxyers = new ServicerProxyGenerator(builder.Options.PackageName, servicerTypes).Generate();

                var codeBuilder = new CodeBuilder("Kadder.Grpc.Server");
                codeBuilder.CreateClass(servicerProxyers.ToArray());
                codeBuilder.AddAssemblyRefence(Assembly.GetExecutingAssembly())
                .AddAssemblyRefence(typeof(ILogger).Assembly)
                .AddAssemblyRefence(typeof(ServerServiceDefinition).Assembly)
                .AddAssemblyRefence(typeof(ServiceProviderServiceExtensions).Assembly)
                .AddAssemblyRefence(typeof(Console).Assembly)
                .AddAssemblyRefence(servicerTypes.Select(p => p.Assembly).Distinct().ToArray())
                .AddAssemblyRefence(typeof(KadderBuilder).Assembly)
                .AddAssemblyRefence(typeof(GrpcServerOptions).Assembly)
                .AddAssemblyRefence(builder.GetType().Assembly);

                var codeAssembly = codeBuilder.BuildAsync().Result;
                foreach (var servicerProxyer in servicerProxyers)
                {
                    var namespaces  = $"{servicerProxyer.Namespace}.{servicerProxyer.Name}";
                    var proxyerType = codeAssembly.Assembly.GetType(namespaces);
                    services.AddSingleton(proxyerType);
                    builder.GrpcServicerProxyers.Add(proxyerType);
                }

                services.AddSingleton(server);
                services.AddSingleton(builder);
                services.AddSingleton <IBinarySerializer, ProtobufBinarySerializer>();
                services.AddSingleton(typeof(KadderBuilder), builder);
                services.AddSingleton <IObjectProvider, ObjectProvider>();
            });
            return(hostBuilder);
        }