Netty3 源码分析 - ChannelStateEvent

Netty3 源码分析 - ChannelStateEvent

ChannelStateEvent是ChannelEvent的子接口,可以代表改变的通知或者是请求,取决于它是上行还是下行事件。

UpstreamChannelStateEvent是默认的上行通道状态事件实现类。结合ChannelState中的表很容易看懂源码。
DownstreamChannelStateEvent 是默认的下行通道状态事件实现类。不同的是需要指定一个Future对象,当相应的动作完成后得到通知。源码很容易理解:
public   class  DownstreamChannelStateEvent  implements  ChannelStateEvent {

     private   final  Channel  channel ;
     private   final  ChannelFuture  future ;
     private   final  ChannelState  state ;
     private   final  Object  value ;

     //和UpstreamChannelStateEvent不同的是,多了一个Future对象,需要合适的时候得到通知
     public  DownstreamChannelStateEvent(
            Channel channel, ChannelFuture future,
            ChannelState state, Object value) {

         if  (channel ==  null ) {
             throw   new  NullPointerException(  "channel" );
        }
         if  (future ==  null ) {
             throw   new  NullPointerException(  "future" );
        }
         if  (state ==  null ) {
             throw   new  NullPointerException(  "state" );
        }
         this .  channel  = channel;
         this .  future  = future;
         this .  state  = state;
         this .  value  = value;
    }

     public  Channel getChannel() {
         return   channel ;
    }

     public  ChannelFuture getFuture() {
         return   future ;
    }

     public  ChannelState getState() {
         return   state ;
    }

     public  Object getValue() {
         return   value ;
    }

     @Override
     public  String toString() {
        String channelString = getChannel().toString();
        StringBuilder buf =  new  StringBuilder(channelString.length() + 64);
        buf.append(channelString);
         switch  (getState()) {
         case   OPEN :
             if  (Boolean.  TRUE .equals(getValue())) {
                buf.append(  " OPEN" );
            }  else  {
                buf.append(  " CLOSE" );
            }
             break ;
         case   BOUND :
             if  (getValue() !=  null ) {
                buf.append(  " BIND: " );
                buf.append(getValue());
            }  else  {
                buf.append(  " UNBIND" );
            }
             break ;
         case   CONNECTED :
             if  (getValue() !=  null ) {
                buf.append(  " CONNECT: " );
                buf.append(getValue());
            }  else  {
                buf.append(  " DISCONNECT" );
            }
             break ;
         case   INTEREST_OPS :
            buf.append(  " CHANGE_INTEREST: "  );
            buf.append(getValue());
             break ;
         default :
            buf.append(  ' ' );
            buf.append(getState().name());
            buf.append(  ": " );
            buf.append(getValue());
        }
         return  buf.toString();
    }
}








你可能感兴趣的:(Netty3 源码分析 - ChannelStateEvent)