Example #1
0
        /// <summary>
        /// Inizializzazione regola di pubblicazione
        /// </summary>
        /// <param name="request">Dati della richiesta di pubblicazione</param>
        /// <param name="ruleInfo">Dati della regola</param>
        public virtual void InitializeRule(Subscriber.Listener.ListenerRequest request, Subscriber.RuleInfo ruleInfo)
        {
            this.ListenerRequest = request;

            this.Response = new RuleResponse
            {
                Rule = ruleInfo
            };
        }
Example #2
0
        public Subscriber.Listener.ListenerResponse NotifyEvent(Subscriber.Listener.ListenerRequest request)
        {
            _logger.Info("BEGIN");

            Subscriber.Listener.ListenerResponse response = new Subscriber.Listener.ListenerResponse();

            try
            {
                List <Subscriber.Rules.RuleResponse> ruleResponseList = new List <Subscriber.Rules.RuleResponse>();

                // Reperimento delle regole definite per l'istanza
                RuleInfo[] instanceRules = Subscriber.DataAccess.RuleDataAdapter.GetRules(request.ChannelInfo.Id);

                if (instanceRules != null)
                {
                    foreach (RuleInfo r in instanceRules)
                    {
                        Type t = Type.GetType(r.RuleClassFullName, false);

                        if (t == null)
                        {
                            // Regola non istanziata
                            _logger.ErrorFormat(string.Format(ErrorDescriptions.INVALID_RULE_TYPE, r.RuleClassFullName));

                            r.Error = new ErrorInfo
                            {
                                Id      = ErrorCodes.INVALID_RULE_TYPE,
                                Message = string.Format(ErrorDescriptions.INVALID_RULE_TYPE, r.RuleClassFullName)
                            };

                            ruleResponseList.Add(new Rules.RuleResponse
                            {
                                Rule = r
                            });
                        }
                        else
                        {
                            // Esecuzione delle azioni che estendono la classe astratta "AvvocaturaBaseRule"
                            using (Subscriber.Rules.IRule rule = (Subscriber.Rules.IRule)Activator.CreateInstance(t))
                            {
                                _logger.InfoFormat("Creazione RULE '{0}'", rule.GetType().FullName);

                                // Inizializzazione ed esecuzione della regola
                                rule.InitializeRule(request, r);

                                _logger.InfoFormat("Inizializzazione RULE '{0}'", rule.GetType().FullName);

                                if (rule.Response.Rule.Enabled)
                                {
                                    _logger.InfoFormat("RULE '{0}' abilitata", rule.GetType().FullName);

                                    // Se la regola risulta abilitata, viene eseguita
                                    rule.Execute();

                                    _logger.InfoFormat("RULE '{0}' eseguita", rule.GetType().FullName);

                                    // Esito del calcolo della regola
                                    Subscriber.Rules.RuleResponse ruleResponse = rule.Response;

                                    ruleResponseList.Add(ruleResponse);
                                }
                                else
                                {
                                    _logger.InfoFormat("RULE '{0}' non abilitata", rule.GetType().FullName);
                                }
                            }
                        }
                    }
                }

                // Esito dell'esecuzione delle regole
                response.RuleResponseList = ruleResponseList.ToArray();
            }
            catch (Exception ex)
            {
                // Errore non gestito nel listener

                _logger.Error(ex.Message, ex);

                response.Error = new ErrorInfo
                {
                    Id      = ErrorCodes.UNHANDLED_ERROR,
                    Message = ex.Message,
                    Stack   = ex.ToString()
                };
            }
            finally
            {
                _logger.Info("END");
            }

            return(response);
        }