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; }
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; }
/// <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); }
/// <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); }
/// <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; }
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; } } }
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; } } }