Move ChannelFutureFactory.newVoidFuture() to Channel.Unsafe() / Cleanup
This commit is contained in:
parent
d02bc1c0d3
commit
cb718a07c8
|
@ -92,7 +92,7 @@ public class EchoServer {
|
|||
});
|
||||
|
||||
loop.register(ssc).awaitUninterruptibly().rethrowIfFailed();
|
||||
ssc.bind(new InetSocketAddress(port), ssc.newFuture()).awaitUninterruptibly().rethrowIfFailed();
|
||||
ssc.bind(new InetSocketAddress(port)).awaitUninterruptibly().rethrowIfFailed();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
|
|
@ -73,7 +73,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
private final ChannelPipeline pipeline = new DefaultChannelPipeline(this);
|
||||
private final List<ChannelFutureListener> closureListeners = new ArrayList<ChannelFutureListener>(4);
|
||||
private final ChannelFuture succeededFuture = new SucceededChannelFuture(this);
|
||||
private final ChannelFuture voidFuture = new VoidChannelFuture(this);
|
||||
|
||||
private volatile EventLoop eventLoop;
|
||||
private volatile boolean registered;
|
||||
|
@ -159,58 +158,42 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
|
||||
@Override
|
||||
public ChannelFuture bind(SocketAddress localAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().bind(localAddress, f);
|
||||
return f;
|
||||
return pipeline().bind(localAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().connect(remoteAddress, f);
|
||||
return f;
|
||||
return pipeline().connect(remoteAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().connect(remoteAddress, localAddress, f);
|
||||
return f;
|
||||
return pipeline().connect(remoteAddress, localAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture disconnect() {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().disconnect(f);
|
||||
return f;
|
||||
return pipeline().disconnect(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture close() {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().close(f);
|
||||
return f;
|
||||
return pipeline().close(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture deregister() {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().deregister(f);
|
||||
return f;
|
||||
return pipeline().deregister(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture flush() {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().flush(f);
|
||||
return f;
|
||||
return pipeline().flush(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture write(Object message) {
|
||||
ChannelFuture f = newFuture();
|
||||
pipeline().write(message, f);
|
||||
return f;
|
||||
return pipeline().write(message, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -273,11 +256,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
return new FailedChannelFuture(this, cause);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture newVoidFuture() {
|
||||
return voidFuture;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addClosureListener(final ChannelFutureListener listener) {
|
||||
if (listener == null) {
|
||||
|
@ -445,6 +423,8 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
|
||||
private class DefaultUnsafe implements Unsafe {
|
||||
|
||||
private final ChannelFuture voidFuture = new VoidChannelFuture(AbstractChannel.this);
|
||||
|
||||
@Override
|
||||
public java.nio.channels.Channel ch() {
|
||||
return javaChannel();
|
||||
|
@ -455,6 +435,11 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
return firstOut();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture voidFuture() {
|
||||
return voidFuture;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SocketAddress localAddress() {
|
||||
return localAddress0();
|
||||
|
@ -624,7 +609,7 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
pipeline().fireChannelInactive();
|
||||
}
|
||||
|
||||
deregister(newVoidFuture());
|
||||
deregister(voidFuture());
|
||||
} else {
|
||||
// Closed already.
|
||||
future.setSuccess();
|
||||
|
@ -689,12 +674,12 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
}
|
||||
|
||||
if (closed) {
|
||||
close(newVoidFuture());
|
||||
close(voidFuture());
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
pipeline().fireExceptionCaught(t);
|
||||
if (t instanceof IOException) {
|
||||
close(newVoidFuture());
|
||||
close(voidFuture());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -737,7 +722,7 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha
|
|||
if (isOpen()) {
|
||||
return;
|
||||
}
|
||||
close(newVoidFuture());
|
||||
close(voidFuture());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -174,6 +174,7 @@ public interface Channel extends AttributeMap, ChannelOutboundInvoker, ChannelFu
|
|||
public interface Unsafe {
|
||||
java.nio.channels.Channel ch();
|
||||
ChannelBufferHolder<Object> out();
|
||||
ChannelFuture voidFuture();
|
||||
|
||||
SocketAddress localAddress();
|
||||
SocketAddress remoteAddress();
|
||||
|
|
|
@ -4,5 +4,4 @@ public interface ChannelFutureFactory {
|
|||
ChannelFuture newFuture();
|
||||
ChannelFuture newSucceededFuture();
|
||||
ChannelFuture newFailedFuture(Throwable cause);
|
||||
ChannelFuture newVoidFuture();
|
||||
}
|
||||
|
|
|
@ -658,58 +658,42 @@ public class DefaultChannelPipeline implements ChannelPipeline {
|
|||
|
||||
@Override
|
||||
public ChannelFuture bind(SocketAddress localAddress) {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
bind(localAddress, f);
|
||||
return f;
|
||||
return bind(localAddress, channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress) {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
connect(remoteAddress, f);
|
||||
return f;
|
||||
return connect(remoteAddress, channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
connect(remoteAddress, localAddress, f);
|
||||
return f;
|
||||
return connect(remoteAddress, localAddress, channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture disconnect() {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
disconnect(f);
|
||||
return f;
|
||||
return disconnect(channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture close() {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
close(f);
|
||||
return f;
|
||||
return close(channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture deregister() {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
deregister(f);
|
||||
return f;
|
||||
return deregister(channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture flush() {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
flush(f);
|
||||
return f;
|
||||
return flush(channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture write(Object message) {
|
||||
ChannelFuture f = channel().newFuture();
|
||||
write(message, f);
|
||||
return f;
|
||||
return write(message, channel().newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1148,58 +1132,42 @@ public class DefaultChannelPipeline implements ChannelPipeline {
|
|||
|
||||
@Override
|
||||
public ChannelFuture bind(SocketAddress localAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
bind(localAddress, f);
|
||||
return f;
|
||||
return bind(localAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
connect(remoteAddress, f);
|
||||
return f;
|
||||
return connect(remoteAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
|
||||
ChannelFuture f = newFuture();
|
||||
connect(remoteAddress, localAddress, f);
|
||||
return f;
|
||||
return connect(remoteAddress, localAddress, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture disconnect() {
|
||||
ChannelFuture f = newFuture();
|
||||
disconnect(f);
|
||||
return f;
|
||||
return disconnect(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture close() {
|
||||
ChannelFuture f = newFuture();
|
||||
close(f);
|
||||
return f;
|
||||
return close(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture deregister() {
|
||||
ChannelFuture f = newFuture();
|
||||
deregister(f);
|
||||
return f;
|
||||
return deregister(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture flush() {
|
||||
ChannelFuture f = newFuture();
|
||||
flush(f);
|
||||
return f;
|
||||
return flush(newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture write(Object message) {
|
||||
ChannelFuture f = newFuture();
|
||||
write(message, f);
|
||||
return f;
|
||||
return write(message, newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1262,10 +1230,5 @@ public class DefaultChannelPipeline implements ChannelPipeline {
|
|||
public ChannelFuture newFailedFuture(Throwable cause) {
|
||||
return channel().newFailedFuture(cause);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture newVoidFuture() {
|
||||
return channel().newVoidFuture();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,9 +51,10 @@ public abstract class SingleThreadEventLoop extends AbstractExecutorService impl
|
|||
|
||||
@Override
|
||||
public ChannelFuture register(Channel channel) {
|
||||
ChannelFuture future = channel.newFuture();
|
||||
register(channel, future);
|
||||
return future;
|
||||
if (channel == null) {
|
||||
throw new NullPointerException("channel");
|
||||
}
|
||||
return register(channel, channel.newFuture());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -181,14 +181,10 @@ public class DefaultChannelGroup extends AbstractSet<Channel> implements Channel
|
|||
new LinkedHashMap<Integer, ChannelFuture>(size());
|
||||
|
||||
for (Channel c: serverChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.close(f);
|
||||
futures.put(c.id(), f.awaitUninterruptibly());
|
||||
futures.put(c.id(), c.close().awaitUninterruptibly());
|
||||
}
|
||||
for (Channel c: nonServerChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.close(f);
|
||||
futures.put(c.id(), f);
|
||||
futures.put(c.id(), c.close());
|
||||
}
|
||||
|
||||
return new DefaultChannelGroupFuture(this, futures);
|
||||
|
@ -200,14 +196,10 @@ public class DefaultChannelGroup extends AbstractSet<Channel> implements Channel
|
|||
new LinkedHashMap<Integer, ChannelFuture>(size());
|
||||
|
||||
for (Channel c: serverChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.disconnect(f);
|
||||
futures.put(c.id(), f.awaitUninterruptibly());
|
||||
futures.put(c.id(), c.disconnect());
|
||||
}
|
||||
for (Channel c: nonServerChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.disconnect(f);
|
||||
futures.put(c.id(), f);
|
||||
futures.put(c.id(), c.disconnect());
|
||||
}
|
||||
|
||||
return new DefaultChannelGroupFuture(this, futures);
|
||||
|
@ -220,15 +212,11 @@ public class DefaultChannelGroup extends AbstractSet<Channel> implements Channel
|
|||
if (message instanceof ChannelBuffer) {
|
||||
ChannelBuffer buf = (ChannelBuffer) message;
|
||||
for (Channel c: nonServerChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.write(buf.duplicate(), f);
|
||||
futures.put(c.id(), f);
|
||||
futures.put(c.id(), c.write(buf.duplicate()));
|
||||
}
|
||||
} else {
|
||||
for (Channel c: nonServerChannels.values()) {
|
||||
ChannelFuture f = c.newFuture();
|
||||
c.write(message, f);
|
||||
futures.put(c.id(), f);
|
||||
futures.put(c.id(), c.write(message));
|
||||
}
|
||||
}
|
||||
return new DefaultChannelGroupFuture(this, futures);
|
||||
|
|
Loading…
Reference in New Issue
Block a user