示例#1
0
        public IChannelHandlerContext FindOutboundContext(LifeCycleFlag lifeCycleFlag)
        {
            IChannelHandlerContext ctx = this;

            do
            {
                ctx = ctx.Prev;
            } while (ctx != null && !ctx.IsLifeCycle(lifeCycleFlag));

            return(ctx);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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;
            }
        }
示例#4
0
 public bool IsLifeCycle(LifeCycleFlag lifeCycleFlag)
 {
     throw new NotImplementedException();
 }