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)); }
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); }
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); }