看!源码之Netty

7、看!源码之netty中监听器的定义

2019-01-30  本文已影响0人  starskye

netty中的监听器

此处只会讲解监听器的定义,因为监听器具体的实现都是根据使用时的逻辑做的定义,之所以讲解定义也是为了再讲解其他地方如果使用到了他读者可以大概猜测出他做了什么事情,然后再去看实现。

//jdk 提供的接口 只用于监听器的标识,jdk官方建议所有监听器实现此标识,而netty则接纳了建议,此接口不必纠结他仅仅是一个标识接口。
public interface EventListener {
}
//此接口继承与上方接口,并且有个泛型是Future此类型并不陌生之前文章一直在讲述他
//此接口的定义:监听Futuer的操作,当Future中添加了监听器,Future的个别方法被调用时则会触发添加的监听器,一般有success、failure等还有些都是根据具体future实现走的
//如果有遗忘的读者可以再看下前面的文章中通知调用部分
public interface GenericFutureListener<F extends Future<?>> extends EventListener {
    //操作成功后的调用,传入Future则是操作完成的Future
    void operationComplete(F future) throws Exception;
}
//此监听器并没有什么特殊的含义,只不过做了跟细化的约束,此监听器只会用于ChannelGroupFuture类型的Future
public interface ChannelGroupFutureListener extends GenericFutureListener<ChannelGroupFuture> {

}
//与上方接口一样仅仅是一个监听器的别名,针对ChannelFuture做的约束监听器
public interface ChannelFutureListener extends GenericFutureListener<ChannelFuture> {
    //内部定义的默认实现CLOSE 当ChannelFuture关闭的时候如果添加了此监听器则会将管道一并关闭
    ChannelFutureListener CLOSE = new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) {
            future.channel().close();
        }
    };
    //当future设置失败的时候触发CLOSE_ON_FAILURE监听器会将管道关闭
    ChannelFutureListener CLOSE_ON_FAILURE = new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) {
            if (!future.isSuccess()) {
                future.channel().close();
            }
        }
    };
    //CLOSE_ON_FAILURE是这是失败则关闭,而FIRE_EXCEPTION_ON_FAILURE设置失败则传播异常具体在讲述pipeline的时候会进行讲解
    ChannelFutureListener FIRE_EXCEPTION_ON_FAILURE = new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) {
            if (!future.isSuccess()) {
                future.channel().pipeline().fireExceptionCaught(future.cause());
            }
        }
    };
}
//针对GenericFutureListener起的别名,对GenericFutureListener的泛型Future做了隐藏。
public interface FutureListener<V> extends GenericFutureListener<Future<V>> { }
//通用的进度监听器,约束了Future的类型必须继承于ProgressiveFuture
public interface GenericProgressiveFutureListener<F extends ProgressiveFuture<?>> extends GenericFutureListener<F> {
    //操作进度触发将会调用此方法,传入当前future 和 当前的进度 和 总的进度
    void operationProgressed(F future, long progress, long total) throws Exception;
}
//针对GenericProgressiveFutureListener起的别名并没有什么,只是将约束更加精细化了
public interface ChannelProgressiveFutureListener extends GenericProgressiveFutureListener<ChannelProgressiveFuture> {
}

定义到此就差不多了,剩下的实现在后面具体使用的时候将会讲述。

上一篇下一篇

猜你喜欢

热点阅读