Esempio n. 1
0
        public void Handle(NewMessageEvent @event)
        {
            _logger.Information(
                "New Message {MessageFile} Arrived -- Running Rules",
                @event.NewMessage);

            Task.Factory.StartNew(
                () =>
            {
                Thread.Sleep(2000);
                _rulesRunner.Run(Rules.ToArray(), @event.NewMessage);
            });
        }
Esempio n. 2
0
        public void Handle(PapercutClientReadyEvent @event)
        {
            _logger.Information("Attempting to Load Rules from {RuleFileName} on AppReady", RuleFileName);

            try
            {
                // accessing "Rules" forces the collection to be loaded
                if (Rules.Any())
                {
                    _logger.Information(
                        "Loaded {RuleCount} from {RuleFileName}",
                        Rules.Count,
                        RuleFileName);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Error loading rules from file {RuleFileName}", RuleFileName);
            }

            // rules loaded/updated event
            this._messageBus.Publish(new RulesUpdatedEvent(this.Rules.ToArray()));

            Rules.CollectionChanged += RuleCollectionChanged;
            HookPropertyChangedForRules(Rules);

            // the backend service handles rules running if it's online
            if (!_coordinator.IsBackendServiceOnline)
            {
                _logger.Debug("Setting up Rule Dispatcher Observable");

                // observe message watcher and run rules when a new message arrives
                Observable.FromEventPattern <NewMessageEventArgs>(
                    e => _messageWatcher.NewMessage += e,
                    e => _messageWatcher.NewMessage -= e,
                    TaskPoolScheduler.Default)
                .DelaySubscription(TimeSpan.FromSeconds(1))
                .Subscribe(e => _rulesRunner.Run(Rules.ToArray(), e.EventArgs.NewMessage));
            }
        }