/// <summary>
        ///  追加活动管道
        /// </summary>
        /// <typeparam name="TOut"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="exeFunc">
        /// 执行委托,返回的处理结果:
        ///     TrafficSignal -(活动是否处理成功,业务结果)
        ///         Green_Pass  - 流体自动流入后续管道
        ///         Yellow_Wait - 管道流动暂停等待(仅当前处理业务),既不向后流动,也不触发Block。
        ///         Red_Block - 触发Block,业务流不再向后续管道传递。
        /// </param>
        /// <param name="pipeCode"></param>
        /// <returns></returns>
        public static SimpleActivity AppendActivity <TOut>(this IPipeAppender <TOut> pipe, Func <Task <TrafficSignal> > exeFunc, string pipeCode = null)
        {
            var nextPipe = new SimpleActivity(pipeCode, exeFunc);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
示例#2
0
        /// <summary>
        ///  追加默认消息订阅者管道
        /// </summary>
        /// <typeparam name="TMsg"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="msgDataKey">消息pipeDataKey,默认对应的flow是异步线程池</param>
        /// <returns></returns>
        public static BaseMsgSubscriber <TMsg> AppendMsgSubscriber <TMsg>(this IPipeAppender pipe, string msgDataKey)
        {
            var nextPipe = new SimpleMsgSubscriber <TMsg>(msgDataKey);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
示例#3
0
 /// <summary>
 ///  追加普通管道
 /// </summary>
 /// <typeparam name="TOut"></typeparam>
 /// <typeparam name="TNextOut"></typeparam>
 /// <typeparam name="TNextPara"></typeparam>
 /// <typeparam name="TNextRes"></typeparam>
 /// <param name="pipe"></param>
 /// <param name="nextPipe"></param>
 /// <returns></returns>
 public static BaseFourWayPipe <TOut, TNextPara, TNextRes, TNextOut> Append <TOut, TNextPara, TNextRes, TNextOut>(
     this IPipeAppender <TOut> pipe,
     BaseFourWayPipe <TOut, TNextPara, TNextRes, TNextOut> nextPipe)
 {
     pipe.InterAppend(nextPipe);
     return(nextPipe);
 }
示例#4
0
        /// <summary>
        ///  追加默认消息流管道
        /// </summary>
        /// <typeparam name="TMsg"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="msgDataKey">消息pipeDataKey,默认对应的flow是异步线程池</param>
        /// <param name="option"></param>
        /// <returns></returns>
        public static BaseMsgFlow <TMsg> AppendMsgFlow <TMsg>(this IPipeAppender <TMsg> pipe, string msgDataKey,
                                                              DataFlowOption option = null)
        {
            var nextPipe = new SimpleMsgFlow <TMsg>(msgDataKey, option);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
示例#5
0
        /// <summary>
        ///  追加默认消息转换管道
        /// </summary>
        /// <typeparam name="TMsg"></typeparam>
        /// <typeparam name="NextOutContext"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="convertFunc"></param>
        /// <param name="pipeCode"></param>
        /// <returns></returns>
        public static BaseMsgConverter <TMsg, NextOutContext> AppendMsgConverter <TMsg, NextOutContext>(
            this IPipeAppender <TMsg> pipe, Func <TMsg, NextOutContext> convertFunc, string pipeCode = null)
        {
            var nextPipe = new InterMsgConvertor <TMsg, NextOutContext>(pipeCode, convertFunc);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
        /// <summary>
        ///  追加活动管道
        /// </summary>
        /// <typeparam name="TPassivePara"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="exeFunc">
        /// 执行委托
        /// 参数:
        ///     当前活动上下文信息
        /// 结果:
        ///     TrafficSignal &lt;TResult &gt; -(活动是否处理成功,业务结果)
        ///         Green_Pass  - 流体自动流入后续管道
        ///         Yellow_Wait - 管道流动暂停等待(仅当前处理业务),既不向后流动,也不触发Block。
        ///         Red_Block - 触发Block,业务流不再向后续管道传递。
        /// </param>
        /// <param name="pipeCode"></param>
        /// <returns></returns>
        public static SimpleEffectActivity <TPassivePara, TResult> AppendEffectActivity <TPassivePara, TResult>(
            this IPipeAppender <TPassivePara> pipe,
            Func <TPassivePara, Task <TrafficSignal <TResult> > > exeFunc, string pipeCode = null)
        {
            var nextPipe = new SimpleEffectActivity <TPassivePara, TResult>(pipeCode, exeFunc);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
        /// <summary>
        ///  追加活动管道
        /// </summary>
        /// <typeparam name="TNextRes"></typeparam>
        /// <typeparam name="TOut"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="exeFunc">
        /// 执行委托
        /// 结果:
        ///     TrafficSignal &lt;TResult &gt; -(活动是否处理成功,业务结果)
        ///         Green_Pass  - 流体自动流入后续管道
        ///         Yellow_Wait - 管道流动暂停等待(仅当前处理业务),既不向后流动,也不触发Block。
        ///         Red_Block - 触发Block,业务流不再向后续管道传递。
        /// </param>
        /// <param name="pipeCode"></param>
        /// <returns></returns>
        public static SimpleEffectActivity <TNextRes> AppendEffectActivity <TOut, TNextRes>(
            this IPipeAppender <TOut> pipe,
            Func <Task <TrafficSignal <TNextRes> > > exeFunc, string pipeCode = null)
        {
            var nextPipe = new SimpleEffectActivity <TNextRes>(pipeCode, exeFunc);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
示例#8
0
        /// <summary>
        ///  追加消息迭代器
        /// </summary>
        /// <typeparam name="TMsg">消息具体类型</typeparam>
        /// <param name="pipe"></param>
        /// <param name="pipeCode"></param>
        /// <param name="msgFilter">消息过滤器</param>
        /// <returns></returns>
        public static MsgEnumerator <TMsg> AppendMsgEnumerator <TMsg>(
            this IPipeAppender <IEnumerable <TMsg> > pipe, string pipeCode = null,
            Func <IEnumerable <TMsg>, IEnumerable <TMsg> > msgFilter       = null)
        {
            var nextPipe = new MsgEnumerator <TMsg>(pipeCode, msgFilter);

            pipe.InterAppend(nextPipe);
            return(nextPipe);
        }
示例#9
0
        /// <summary>
        /// 基础流体
        /// </summary>
        public EventFlow(BasePipe <InFlowContext> startPipe, IPipeAppender <OutFlowContext> endPipeAppender) : base(PipeType.Flow)
        {
            _startPipe       = startPipe;
            _endPipeAppender = endPipeAppender;

            if (_startPipe == null)
            {
                throw new ArgumentNullException("未发现流体的起始截止管道!");
            }
        }
示例#10
0
        /// <summary>
        /// 基础流体
        /// </summary>
        public Pipeline(string pipeCode, BaseInPipePart <TIn> startPipe,
                        IPipeAppender <TOut> endPipeAppender, PipeLineOption option) : base(pipeCode, PipeType.Pipeline)
        {
            if (startPipe == null || endPipeAppender == null || string.IsNullOrEmpty(pipeCode))
            {
                throw new ArgumentNullException("未发现流体的起始截止管道和管道编码!");
            }

            PipeCode   = pipeCode;
            _startPipe = startPipe;
            _endPipe   = endPipeAppender;

            InitialPipes();

            if (option?.Watcher != null)
            {
                WatchProxy = new PipeWatcherProxy(option.Watcher, option.WatcherDataFlowKey,
                                                  option.WatcherDataFlowOption);
            }

            startPipe.InterInitialContainer(this);
        }
示例#11
0
        /// <summary>
        ///  追加默认消息发布者管道
        /// </summary>
        /// <typeparam name="TMsg"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="pushKeyGenerator">消息key生成器,为空则使用pipeCode作为发布消息key</param>
        /// <param name="option"></param>
        /// <returns></returns>
        public static void AppendMsgPublisher <TMsg>(this IPipeAppender <TMsg> pipe, Func <TMsg, string> pushKeyGenerator, DataPublisherOption option = null)
        {
            var nextPipe = new SimpleMsgPublisher <TMsg>(string.Empty, pushKeyGenerator, option);

            pipe.InterAppend(nextPipe);
        }
示例#12
0
        /// <summary>
        ///  追加默认消息发布者管道
        /// </summary>
        /// <typeparam name="TMsg"></typeparam>
        /// <param name="pipe"></param>
        /// <param name="msgDataKey">消息pipeDataKey,默认消息实现对应的flow是异步线程池</param>
        /// <param name="option"></param>
        /// <returns></returns>
        public static void AppendMsgPublisher <TMsg>(this IPipeAppender <TMsg> pipe, string msgDataKey, DataPublisherOption option = null)
        {
            var nextPipe = new SimpleMsgPublisher <TMsg>(msgDataKey, null, option);

            pipe.InterAppend(nextPipe);
        }
示例#13
0
 /// <summary>
 ///  追加发布消息管道
 /// </summary>
 /// <typeparam name="TOut"></typeparam>
 /// <typeparam name="TNextOut"></typeparam>
 /// <typeparam name="TNextPara"></typeparam>
 /// <typeparam name="TNextRes"></typeparam>
 /// <param name="pipe"></param>
 /// <param name="nextPipe"></param>
 /// <returns></returns>
 public static void Append <TOut, TNextPara, TNextRes, TNextOut>(this IPipeAppender <TOut> pipe,
                                                                 BaseMsgPublisher <TOut> nextPipe)
 {
     pipe.InterAppend(nextPipe);
 }
示例#14
0
 /// <summary>
 /// 基础流体
 /// </summary>
 public Pipeline(string pipeCode, BaseInPipePart <TIn> startPipe,
                 IPipeAppender <TOut> endPipeAppender) : this(pipeCode, startPipe, endPipeAppender, null)
 {
 }
示例#15
0
 /// <inheritdoc />
 public EventFlowGenerator(BasePipe <InFlowContext> startPipe, IPipeAppender <OutFlowContext> endPipeAppender) : this(startPipe)
 {
     NPipeAppender = endPipeAppender;
 }
示例#16
0
 /// <inheritdoc />
 public EmptyEntryPipeline(string pipeCode, BaseInPipePart <Empty> startPipe, IPipeAppender <TContext> endPipeAppender, PipeLineOption option)
     : base(pipeCode, startPipe, endPipeAppender, option)
 {
 }
 /// <summary>
 /// 追加分支管道
 /// </summary>
 /// <typeparam name="OutContext"></typeparam>
 /// <param name="pipe"></param>
 /// <param name="nextPipe"></param>
 /// <returns></returns>
 public static void Append <OutContext>(this IPipeAppender <OutContext> pipe, BaseBranchGateway <OutContext> nextPipe)
 {
     pipe.InterAppend(nextPipe);
 }
示例#18
0
 /// <summary>
 /// 追加枚举器
 /// </summary>
 /// <typeparam name="TMsg">消息具体类型</typeparam>
 /// <param name="pipe"></param>
 /// <param name="nextPipe"></param>
 /// <returns></returns>
 public static MsgEnumerator <TMsg> Append <TMsg>(this IPipeAppender <IEnumerable <TMsg> > pipe, MsgEnumerator <TMsg> nextPipe)
 {
     pipe.InterAppend(nextPipe);
     return(nextPipe);
 }