Example #1
0
        public void AddLast(string name, ChannelHandler handler)
        {
            DefaultChannelHandlerContext context = new DefaultChannelHandlerContext(this, name, handler);

            context.Prev   = Tail.Prev;
            context.Next   = Tail;
            Tail.Prev.Next = context;
            Tail.Prev      = context;
        }
Example #2
0
        public void AddFirst(string name, ChannelHandler handler)
        {
            DefaultChannelHandlerContext context = new DefaultChannelHandlerContext(this, name, handler);

            context.Next   = Head.Next;
            context.Prev   = Head;
            Head.Next.Prev = context;
            Head.Next      = context;
        }
Example #3
0
        /// <summary>
        /// 获取下一个Handler
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private ChannelHandlerContext GetPrevChannelHandlerContext(Type type)
        {
            DefaultChannelHandlerContext context = Prev;

            while (null != context && !type.IsAssignableFrom(context.GetType()))
            {
                context = context.Prev;
            }

            return(context);
        }
Example #4
0
        /// <summary>
        /// 获取下一个Handler
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private ChannelHandlerContext GetNextChannelHandlerContext(Type type)
        {
            DefaultChannelHandlerContext context = Next;

            while (null != context && null != context.ChannelHandler && !type.IsAssignableFrom(context.ChannelHandler.GetType()))
            {
                context = context.Next;
            }

            return(context);
        }
Example #5
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="channel"></param>
        public DefaultChannelPipeline(SocketServerChannel channel)
        {
            DefaultChannelHandlerContext emptyHeader = new DefaultChannelHandlerContext(this, "Internal_Head_Handler", null);
            DefaultChannelHandlerContext emptyTailer = new DefaultChannelHandlerContext(this, "Internal_Tail_Handler", null);

            Head      = emptyHeader;
            Tail      = emptyTailer;
            Head.Next = Tail;
            Tail.Prev = Head;

            Channel = channel;
        }
Example #6
0
        public void Remove(ChannelHandler handler)
        {
            DefaultChannelHandlerContext context = Head;

            if (context != null && context == handler)
            {
                DefaultChannelHandlerContext prev = context.Prev;
                DefaultChannelHandlerContext next = context.Next;
                if (null != prev)
                {
                    prev.Next = next;
                }
                if (null != next)
                {
                    next.Prev = prev;
                }
            }
        }
Example #7
0
        public void Replace(ChannelHandler oldHandler, string newName, ChannelHandler newHandler)
        {
            DefaultChannelHandlerContext newContext = new DefaultChannelHandlerContext(this, newName, newHandler);
            DefaultChannelHandlerContext context    = Head;

            if (context != null && context == oldHandler)
            {
                newContext.Prev = context.Prev;
                newContext.Next = context.Next;

                DefaultChannelHandlerContext prev = context.Prev;
                DefaultChannelHandlerContext next = context.Next;
                if (null != prev)
                {
                    prev.Next = newContext;
                }
                if (null != next)
                {
                    next.Prev = newContext;
                }
            }
        }