public IChannelHandlerContext FindOutboundContext(LifeCycleFlag lifeCycleFlag) { IChannelHandlerContext ctx = this; do { ctx = ctx.Prev; } while (ctx != null && !ctx.IsLifeCycle(lifeCycleFlag)); return(ctx); }
/// <summary> /// 指定的LifeCycleFlag是否存在于Context的标志位中 /// </summary> /// <param name="cycleFlag"></param> /// <returns></returns> public bool IsLifeCycle(LifeCycleFlag cycleFlag) { /************************************************************************/ /* 假设 lifeCycleFlag = 1111 * cycleFlag = 0100 * 那么 lifeCycleFlag & cycleFlag = 1111 & 0100 = 0100 * * 从而保证lifeCycleFlag里面有满足的标志位 * */ /************************************************************************/ var result = (lifeCycleFlag & cycleFlag) == cycleFlag; return(result); }
/// <summary> /// 计算生命周期标识 /// </summary> /// <param name="handler"></param> public void CalcSkippable(IChannelHandler handler) { Ensure.IsNotNull(handler); if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelRegister))) { lifeCycleFlag |= LifeCycleFlag.OnChannelRegister; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelActive))) { lifeCycleFlag |= LifeCycleFlag.OnChannelActive; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelRead))) { lifeCycleFlag |= LifeCycleFlag.OnChannelRead; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelWrite))) { lifeCycleFlag |= LifeCycleFlag.OnChannelWrite; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelClose))) { lifeCycleFlag |= LifeCycleFlag.OnChannelClose; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelException))) { lifeCycleFlag |= LifeCycleFlag.OnChannelException; } if (!IsSkippable(handler, nameof(IChannelHandler.OnChannelFinally))) { lifeCycleFlag |= LifeCycleFlag.OnChannelFinally; } if (!IsSkippable(handler, nameof(IChannelHandler.WriteAsync))) { lifeCycleFlag |= LifeCycleFlag.WriteAsync; } if (!IsSkippable(handler, nameof(IChannelHandler.BindAsync))) { lifeCycleFlag |= LifeCycleFlag.BindAsync; } if (!IsSkippable(handler, nameof(IChannelHandler.ConnectAsync))) { lifeCycleFlag |= LifeCycleFlag.ConnectAsync; } }
public bool IsLifeCycle(LifeCycleFlag lifeCycleFlag) { throw new NotImplementedException(); }