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); }
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); }