Example #1
0
        public IMiramarTaskProvider CreateTaskProvider(string path)
        {
            var publisher = new MiramarPublisher();

            return(CreateTaskProvider(publisher, path));
        }
Example #2
0
        public IMiramarScheduleProvider CreateScheduleProvider(string path)
        {
            var publisher = new MiramarPublisher();

            return(CreateScheduleProvider(publisher, path));
        }
Example #3
0
        static void Main(string[] args)
        {
            ObjectFactory.Initialize(x =>
            {
                x.For <IScheduleMessageHandler>()
                .AddInstances(i =>
                {
                    i.Type <HandlerAddSchedule>();
                    i.Type <HandlerChangeLogging>();
                    i.Type <HandlerChangeSchedule>();
                    i.Type <HandlerPublishConfiguration>();
                    i.Type <HandlerPublishSchedule>();
                    i.Type <HandlerRemoveSchedule>();
                    i.Type <HandlerResumeSchedule>();
                    i.Type <HandlerStopTask>();
                });

                x.Scan(s =>
                {
                    s.AssembliesFromApplicationBaseDirectory();
                    s.AddAllTypesOf <IMiramarTaskFactory>();
                });
            });

            var logger = InfrastructureFactory.CreateLogger("Console");

            logger.Debug("Starting up console application.");

            if (args.Length != 0)
            {
                logger.Info("Waiting on debugger attach. Press any key to continue.");
                Console.ReadKey();
            }

            var messageFactory = CreateMessageFactory(logger);

            if (!messageFactory.IsActive)
            {
                logger.InfoFormat("RabbitMQ is not active. Messaging will not be available.");
            }

            var source           = new CancellationTokenSource();
            var publisher        = new MiramarPublisher(messageFactory);
            var contextProvider  = new MiramarContextProvider();
            var taskProvider     = MiramarConfigurationParser.ParseConfiguration(publisher, "miramar.config");
            var scheduleProvider = MiramarSchedulingParser.ParseSchedule(publisher, "miramar.config");

            var controllerTask = new Task(() =>
            {
                logger.Info("Starting Miramar Controller.");

                var controller = new MiramarController(publisher, taskProvider, scheduleProvider, contextProvider, true);
                controller.ThreadRun(source.Token);
            });

            controllerTask.ContinueWith(x => logger.Info("Console application is shutting down."));

            var schedulerTask = new Task(() =>
            {
                logger.Info("Starting Miramar Scheduler.");

                var scheduler = new ScheduleService(messageFactory, taskProvider, scheduleProvider, contextProvider);
                scheduler.ThreadRun(source.Token);
            });

            schedulerTask.ContinueWith(x => logger.Info("Scheduler application is shutting down."));

            AddMiramarAdapter(messageFactory);

            controllerTask.Start();
            schedulerTask.Start();

            logger.Info("Miramar Controller is now running.");
            logger.Info("Miramar Scheduler is now running");
            logger.Info("Press CTRL+C or 'Q' to stop.");

            Console.CancelKeyPress += (s, e) =>
            {
                logger.Warn("CTRL+C detected. Attempting to quit.");
                CancelAndWait(source, messageFactory,
                              controllerTask, schedulerTask);
            };

            while (true)
            {
                var key = Console.ReadKey();
                if (key.Key != ConsoleKey.Q)
                {
                    continue;
                }

                logger.Warn("'Q' detected. Attempting to stop.");
                CancelAndWait(source, messageFactory,
                              controllerTask, schedulerTask);

                break;
            }
        }