package org.jboss.netty.channel;
import java.util.List;
import java.util.Map;
/**
* ChannelPipeline�����þ�����֯һϵ�е�ChannelHandlers Ϊijһ��Channel����������¼���
* ʵ�������ع������ĸ���ʽ��an advanced form of the Intercepting Filter pattern����
* ������Ч������δ���һ���¼��Լ�ChannelHandlers֮����ν�����
*/
public interface ChannelPipeline {
/**
* ��ͷ���������ChannelHandler��
* ���ͬ����Handler�Ѿ����ڣ�IllegalArgumentException
* ���ij������Ϊnull��NullPointerException
*/
void addFirst(String name, ChannelHandler handler);
/**
* �����
*/
void addLast(String name, ChannelHandler handler);
/**
* �����ָ����baseName Handlerǰ�����
* baseNameָ����Handler���ڣ�NoSuchElementException��
* ʣ�µ������쳣ͬ���棻
*/
void addBefore(String baseName, String name, ChannelHandler handler);
/**
* �����ָ����baseName Handler�������
*/
void addAfter(String baseName, String name, ChannelHandler handler);
/**
* Removes the specified ChannelHandler from this pipeline.
*/
void remove(ChannelHandler handler);
/**
* �Ƴ���Ϊname��Handler��������
*/
ChannelHandler remove(String name);
/**
* �Ƴ�ij�����͵�Handler�����ͷ���
*/
<T extends ChannelHandler> T remove(Class<T> handlerType);
/**
* Removes the first/last ChannelHandler in this pipeline.
*���pipelineΪ�յĻ���NoSuchElementException��
*/
ChannelHandler removeFirst();
ChannelHandler removeLast();
/**
* Handler���滻
*/
void replace(ChannelHandler oldHandler, String newName, ChannelHandler newHandler);
/**
* Handler���滻��
* ֻ��������ɵ�Handler������ָ����
*/
ChannelHandler replace(String oldName, String newName, ChannelHandler newHandler);
/**
* �滻ij�����͵�Handler��
*/
<T extends ChannelHandler> T replace(Class<T> oldHandlerType, String newName, ChannelHandler newHandler);
/**
* ���ֻ�Handler�ķ�������һ��
*/
ChannelHandler getFirst();
/**
* ���һ��
*/
ChannelHandler getLast();
/**
* ��Handler֮��
*/
ChannelHandler get(String name);
/**
* ��HandlerClass������
*/
<T extends ChannelHandler> T get(Class<T> handlerType);
/**
* �õ����Handler��context
*/
ChannelHandlerContext getContext(ChannelHandler handler);
/**
* �����õ����Handler��context
*/
ChannelHandlerContext getContext(String name);
/**
* �������͵õ����Handler��context
*/
ChannelHandlerContext getContext(Class<? extends ChannelHandler> handlerType);
/**
* ����һ���¼�������ˮ�ߵ�һ��ChannelUpstreamHandler��
* ��Ϊ���pipeline���͵�
*/
void sendUpstream(ChannelEvent e);
/**
* ����һ���¼�������ˮ�ߵ�һ��ChannelDownstreamHandler��
* ��Ϊ���pipeline���͵�
*/
void sendDownstream(ChannelEvent e);
/**
* ����һ������Runnable�������pipeline��IO�߳�ȥִ�У�
*/
ChannelFuture execute(Runnable task);
/**
* ������Channel��
*/
Channel getChannel();
/**
* ������ChannelSink��
*/
ChannelSink getSink();
/**
* ����Pipeline���õ��ض���ͨ����ChannelSink��
* һ�����ã��������õġ�
* Attaches this pipeline to the specified Channel and
* ChannelSink. Once a pipeline is attached, it can't be detached
* nor attached again.
*
* �׳�IllegalStateException ������pipeline�Ѿ���ӵ�ij��channelSink��
*/
void attach(Channel channel, ChannelSink sink);
/**
* �ж����Pipeline�Ƿ��Ѽ���ij��Channel
*/
boolean isAttached();
/**
* �������Handler������
*/
List<String> getNames();
/**
* �������Handler����Ϣ�����֣�Handler ӳ����������TreeMap;
*/
Map<String, ChannelHandler> toMap();
}