Пример #1
0
        private async Task <ExchangeMessage> SendAndLog(QueueAbstract queue, ExchangeMessage message)
        {
            message = await queue.Send(message);

            return(message);
        }
Пример #2
0
        public ExchangeMessage PreAndPostProcess(ExchangeMessage xm)
        {
            QXLog(xm?.uuid, "Output Node: Message Recieved From Pipe", null, "PROGRESS");


            // payload is the actual content of the message to be send
            string message = xm.payload;

            // After the delivery or prior to sending a message, it can be filtered or
            // transformed according to the configuration for each queue

            // The Expression object manages the evaluation of all the filters
            if (expression != null)
            {
                bool pass = expression.Pass(message);

                logger.Info($"Top Expression Evaluated {pass}");
                if (!pass)
                {
                    if (altQueue != null)
                    {
                        logger.Info($"Sending to Alt Queue {altQueue.name}");
                        QXLog(xm?.uuid, "Message did not pass filter", "Sending to Alt Queue", "PROGRESS");
                        Task.Run(async() => { _ = await altQueue.Send(xm); });
                    }
                    else
                    {
                        QXLog(xm?.uuid, "Message did not pass filter", "No Alt Queue Configured", "WARNING");
                    }
                    xm.pass = false;
                    return(xm);
                }
                else
                {
                    xm.pass = true;
                }
            }

            if (topLevelFilter != null)
            {
                bool pass = topLevelFilter.Pass(message);

                logger.Info($"Top Filter Evaluated {pass}");
                if (!pass)
                {
                    if (altQueue != null)
                    {
                        logger.Info($"Sending to Alt Queue {altQueue.name}");
                        QXLog(xm?.uuid, "Message did not pass filter", "Sending to Alt Queue", "PROGRESS");
                        _ = altQueue.Send(xm);
                    }
                    else
                    {
                        QXLog(xm?.uuid, "Message did not pass filter", "No Alt Queue Configured", "WARNING");
                    }
                    xm.pass = false;
                    return(xm);
                }
                else
                {
                    xm.pass = true;
                }
            }


            // If a XSLT transform has been specified
            if (bTransform)
            {
                QXLog(xm?.uuid, "Starting Message Transformation", null, "PROGRESS");
                message = Transform(message, xslVersion);
                QXLog(xm?.uuid, "Message Transformation Complete", null, "PROGRESS");

                xm.transformed = true;
            }
            else
            {
                xm.transformed = false;
            }

            if (message == null || message.Length == 0)
            {
                logger.Info("Message blocked by XSL Transform of Zero Length");
                xm.payload = null;
                xm.status  = "Message blocked by XSL Transform. Null or Zero Length";

                QXLog(xm?.uuid, "Messaage Transformation", "Transformation resulted in a message of zero length", "WARNING");

                return(xm);
            }

            xm.payload = message;
            QXLog(xm?.uuid, "Output Node: Post Processing Complete", null, "PROGRESS");
            return(xm);
        }