Esempio n. 1
0
        /// <summary>
        /// Build the pipeline based on the configuration
        /// </summary>
        /// <param name="server"></param>
        /// <param name="config"></param>
        public void BuildPipeline(IProcessingServer server, PipelineConfiguration config)
        {
            _logger.Write($"Setup Pipeline:{config}", Category.Log, LogLevel.Debug, "PipelineBuilder");

            server.SetupPipeline(config.Id, s =>
            {
                var rootCtx = GlobalConfiguration.Configuration.Resolve <IActivationContext>();

                s.Register(() =>
                {
                    var pipeline = new EventPipeline();
                    foreach (var node in config.OutputHandlers)
                    {
                        var ctx           = rootCtx.ChildContext();
                        var outputHandler = BuildHandler <IOutputHandler>(ctx, node);

                        var converter = node.BuildDataFilter();
                        if (converter.Filters.Any(f => f.FilterType == Filters.FilterType.Property))
                        {
                            outputHandler = new DataFilterDecorator(converter, outputHandler);
                        }

                        pipeline.AddHandler(outputHandler);
                    }

                    return(pipeline);
                }, config.Options);

                var inputHandler = BuildHandler <IInputHandler>(rootCtx.ChildContext(), config.InputHandler);
                s.Register(inputHandler);
            });
        }
        /// <summary>
        /// add a handler with a set of filters to the pipeline
        /// </summary>
        /// <param name="pipeline"></param>
        /// <param name="outputHandler"></param>
        /// <param name="filters"></param>
        public static void AddHandler(this IEventPipeline pipeline, IOutputHandler outputHandler, IEnumerable <string> filters)
        {
            var converter = filters.BuildDataFilter();

            outputHandler = new DataFilterDecorator(converter, outputHandler);
            pipeline.AddHandler(outputHandler);
        }