Example #1
0
 private static int RunMain()
 {
     try {
         var pluginObject = new PluginObject();
         Task.WaitAll(
             Task.Run(() => InitPlugins(LoadPlugins(), pluginObject))
             .ContinueWith(_ => InitMessengers(LoadMessengers(), pluginObject))
             );
         Console.ReadKey();
         return(0);
     }
     catch (Exception ex) {
         Console.WriteLine(ex);
         Console.WriteLine("\nPress and key to exit.");
         Console.ReadKey();
         return(1);
     }
 }
Example #2
0
        private static async Task InitPlugins(Task <IPlugin[]> plugins, PluginObject pluginObject)
        {
            Guard.AgainstNull(nameof(plugins), plugins);
            Guard.AgainstNull(nameof(pluginObject), pluginObject);

            await Task.Run(() => {
                try {
                    var options = new ParallelOptions {
                        MaxDegreeOfParallelism = 1
                    };
                    Parallel.ForEach(plugins.Result, options, plugin => {
                        plugin.Initialize(pluginObject);
                        plugin.Execute();
                    });
                }
                catch (AggregateException e) {
                    foreach (var ie in e.InnerExceptions)
                    {
                        Console.WriteLine(ie.ToString());
                    }
                }
            });
        }
Example #3
0
        private static async Task InitMessengers(Task <IPipelineMessenger[]> messengers, PluginObject pluginObject)
        {
            Guard.AgainstNull(nameof(messengers), messengers);
            Guard.AgainstNull(nameof(pluginObject), pluginObject);

            void OnMessageRecived(byte[] body, Dictionary <string, string> context)
            {
                var message = new PipelineMessage {
                    Id      = context[WidgetConst.PMSG_ID],
                    Source  = context[WidgetConst.PMSG_SOURCE],
                    Content = Encoding.UTF8.GetString(body),
                    Targets = new List <string> {
                        context[WidgetConst.PMSG_JOBID]
                    },
                };

                pluginObject.ReceiveMessage(message);
            }

            await Task.Run(() => {
                try {
                    var options = new ParallelOptions {
                        MaxDegreeOfParallelism = 1
                    };
                    Parallel.ForEach(messengers.Result, options, messenger => {
                        messenger.OnMessageReceived += OnMessageRecived;
                        messenger.Initialize(Logger);
                    });
                }
                catch (AggregateException e) {
                    foreach (var ie in e.InnerExceptions)
                    {
                        Console.WriteLine(ie.ToString());
                    }
                }
            });
        }