首页 > 代码库 > Netty3 源码分析 - ChannelStateEvent
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。