示例#1
0
        /// <summary>
        /// This method adds a rewrite rule to the channel.
        /// </summary>
        /// <param name="rule">The rule.</param>
        /// <returns>Returns true if the rule has been added.</returns>
        public bool RedirectAdd(MessageRedirectRule rule)
        {
            bool success = mRedirectRules.TryAdd(rule.Id, rule);

            if (success)
            {
                mRedirectCache.Clear();
            }

            return(success);
        }
        /// <summary>
        /// This method attaches a rewrite rule to the channel pipeline.
        /// </summary>
        /// <typeparam name="C">The channel pipeline type.</typeparam>
        /// <param name="cpipe">The incoming pipeline.</param>
        /// <param name="rewriteRule">The rewrite rule.</param>
        /// <returns>Returns the original pipeline.</returns>
        public static C AttachMessageRedirectRule <C>(this C cpipe, MessageRedirectRule rewriteRule)
            where C : IPipelineChannel <IPipeline>
        {
            if (cpipe is IPipelineChannelBroadcast)
            {
                cpipe.ToChannel(ChannelDirection.Incoming).RedirectAdd(rewriteRule);
                cpipe.ToChannel(ChannelDirection.Outgoing).RedirectAdd(rewriteRule);
            }
            else
            {
                cpipe.Channel.RedirectAdd(rewriteRule);
            }

            return(cpipe);
        }