/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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 <TResult > -(活动是否处理成功,业务结果) /// 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 <TResult > -(活动是否处理成功,业务结果) /// 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); }
/// <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); }
/// <summary> /// 基础流体 /// </summary> public EventFlow(BasePipe <InFlowContext> startPipe, IPipeAppender <OutFlowContext> endPipeAppender) : base(PipeType.Flow) { _startPipe = startPipe; _endPipeAppender = endPipeAppender; if (_startPipe == null) { throw new ArgumentNullException("未发现流体的起始截止管道!"); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 基础流体 /// </summary> public Pipeline(string pipeCode, BaseInPipePart <TIn> startPipe, IPipeAppender <TOut> endPipeAppender) : this(pipeCode, startPipe, endPipeAppender, null) { }
/// <inheritdoc /> public EventFlowGenerator(BasePipe <InFlowContext> startPipe, IPipeAppender <OutFlowContext> endPipeAppender) : this(startPipe) { NPipeAppender = endPipeAppender; }
/// <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); }
/// <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); }