Example #1
0
        public bool DispatchSubscriberMessage(Message message)
        {
            if (_chnList == null || message == null)
            {
                return(true);
            }

            _log.Write("Serializing message to XML string.");
            string         msgXml = message.ToXMLString();
            MessagePackage p      = new MessagePackage(message, msgXml);

            _log.Write("Begin dispatching message to channels.");

            bool sendSuccess       = true;
            bool hasMatchedChannel = false;

            foreach (ChannelControler chn in _chnList)
            {
                _log.Write("Begin trying channel: " + chn.ToString());
                ChannelProcessResult r = chn.ChannelImpl.ProcessSubscriberMessage(p);
                _log.Write(string.Format("End trying channel: {0}, Result: {1}", chn, r));

                bool continues = false;
                switch (r)
                {
                case ChannelProcessResult.NotMatchEntryCriteria:
                {
                    continues = true;
                    break;
                }

                case ChannelProcessResult.ProcessingError:
                {
                    hasMatchedChannel = true;
                    continues         = chn.ChannelConfig.PassOnOriginalMessageToNextChannelIfProcessingError;
                    break;
                }

                case ChannelProcessResult.SendingError:
                {
                    hasMatchedChannel = true;
                    sendSuccess       = false;
                    break;
                }

                case ChannelProcessResult.Success:
                {
                    hasMatchedChannel = true;
                    break;
                }
                }

                if (!sendSuccess)
                {
                    break;
                }
                if (continues)
                {
                    continue;
                }
                else
                {
                    break;
                }
            }

            if (!hasMatchedChannel)
            {
                sendSuccess = false;
            }
            _log.Write(string.Format("End dispatching message to channels. Sending Result: {0}", sendSuccess));
            return(sendSuccess);
        }
Example #2
0
        public bool DispatchResponserMessage(Message request, out Message response)
        {
            response = null;
            if (_chnList == null || request == null)
            {
                return(false);
            }

            _log.Write("Serializing requesting message to XML string.");
            string         reqMsgXml  = request.ToXMLString();
            MessagePackage reqPackage = new MessagePackage(request, reqMsgXml);

            _log.Write("Begin dispatching requesting message to channels.");

            bool procesSuccess = false;

            foreach (ChannelControler chn in _chnList)
            {
                MessagePackage rspPackage = null;
                _log.Write("Begin trying channel: " + chn.ToString());
                ChannelProcessResult r = chn.ChannelImpl.ProcessResponserMessage(reqPackage, out rspPackage);
                _log.Write(string.Format("End trying channel: {0}, Result: {1}", chn, r));

                bool continues = false;
                switch (r)
                {
                case ChannelProcessResult.NotMatchEntryCriteria:
                {
                    continues = true;
                    break;
                }

                case ChannelProcessResult.ProcessingError:
                {
                    continues = chn.ChannelConfig.PassOnOriginalMessageToNextChannelIfProcessingError;
                    break;
                }

                case ChannelProcessResult.SendingError:
                {
                    break;
                }

                case ChannelProcessResult.Success:
                {
                    procesSuccess = (rspPackage != null);
                    break;
                }
                }

                if (procesSuccess)
                {
                    _log.Write("Deserializing XML string to responsing message.");
                    string rspMsgXml = rspPackage.GetMessageXml();
                    response      = XObjectManager.CreateObject <Message>(rspMsgXml);
                    procesSuccess = (response != null);
                    break;
                }

                if (continues)
                {
                    continue;
                }
                else
                {
                    break;
                }
            }

            _log.Write(string.Format("End dispatching requesting message to channels. Processing Result: {0}", procesSuccess));
            return(procesSuccess);
        }