public static async Task <TResponse> CallAsync <TResponse>(this IRoutingSender sender, object request, CancellationToken cancellationToken = default)
        {
            var requestMessage = JsonMessage.Write(request);

            var responseMessage = await sender.CallAsync(requestMessage, cancellationToken);

            return(JsonMessage.Read <TResponse>(responseMessage));
        }
Ejemplo n.º 2
0
        public void Configure(IApplicationBuilder app, IRoutingSender sender)
        {
            app.UseTracing(ServiceName);

            var router = new RouteBuilder(app);

            router.MapGet("list", HandleList);
            router.MapGet("search", HandleSearch);
            router.MapPost("new", HandleNew);

            app.UseRouter(router.Build());
        }
Ejemplo n.º 3
0
        private static IWebHost StartWebServer(PluginMetadata plugin, IRoutingSender sender)
        {
            var port = Interlocked.Increment(ref _port);

            Console.WriteLine($"Running {plugin.ServiceKey} HTTP server on {port}");

            return(new WebHostBuilder()
                   .UseKestrel(k => k.ListenLocalhost(port))
                   .ConfigureServices(services => services.AddSingleton(sender))
                   .UseStartup(plugin.Type)
                   .Start());
        }
Ejemplo n.º 4
0
        public static LocalModel CreateHandler(IRoutingSender sender)
        {
            var plugins = DiscoverPlugins();
            var handler = new LocalModel();

            foreach (var plugin in plugins.Where(x => x.ServiceType == ServiceType.MessageHandler))
            {
                Bootstrapper.RegisterPluginAsync(sender, handler, plugin).Wait();
            }

            return(handler);
        }
Ejemplo n.º 5
0
        public static async Task RegisterPluginAsync(IRoutingSender sender, IRoutingRegistration registration, PluginMetadata pluginMetadata)
        {
            if (pluginMetadata.ServiceType != ServiceType.MessageHandler)
            {
                return;
            }

            var plugin = CreatePlugin(pluginMetadata, sender);

            var routes = RouteDiscoverer.Discover(pluginMetadata);

            foreach (var route in routes)
            {
                await RegisterRouteAsync(registration, plugin, route);
            }
        }
Ejemplo n.º 6
0
        private static object CreatePlugin(PluginMetadata metadata, IRoutingSender sender)
        {
            var type = metadata.Type;

            var constructor = type.GetConstructor(new[] { typeof(IRoutingSender) });

            if (constructor != null)
            {
                return(constructor.Invoke(new object[] { sender }));
            }

            constructor = type.GetConstructor(new Type[0]);
            if (constructor != null)
            {
                return(constructor.Invoke(new object[0]));
            }

            throw new InvalidOperationException("Cannot activate the plugin, missing compatible constructor");
        }
 public BusinessLogic(IRoutingSender sender)
 {
     _sender = sender;
 }
Ejemplo n.º 8
0
 public TracedRoutingSender(IRoutingSender sender, string serviceName)
 {
     _sender      = sender;
     _serviceName = serviceName;
 }
 public static IRoutingSender ConfigureTracing(this IRoutingSender sender, string serviceName)
 {
     return(new TracedRoutingSender(sender, serviceName));
 }
        public static async Task SendAsync(this IRoutingSender sender, object request, CancellationToken cancellationToken = default)
        {
            var message = JsonMessage.Write(request);

            await sender.SendAsync(message, cancellationToken);
        }
 public static Task <TResponse> CallAsync <TRequest, TResponse>(this IRoutingSender sender, TRequest request, CancellationToken cancellationToken = default)
 {
     return(CallAsync <TResponse>(sender, request, cancellationToken));
 }
 public static Task SendAsync <T>(this IRoutingSender sender, T request, CancellationToken cancellationToken = default)
 {
     return(SendAsync(sender, (object)request, cancellationToken));
 }
Ejemplo n.º 13
0
 public PollyRoutingSender(IRoutingSender sender, AsyncPolicy policy)
 {
     _sender = sender;
     _policy = policy;
 }
Ejemplo n.º 14
0
 public TranslationLogic(IRoutingSender sender)
 {
     _sender = sender;
 }
 protected abstract LocalModel CreateHandler(IRoutingSender sender);