Add methods that add/remove multiple ChannelFutureListeners to ChannelFuture
- Fixes #811
This commit is contained in:
parent
1f72e53af3
commit
02a6e85feb
@ -250,6 +250,14 @@ public interface ChannelFuture extends Future<Void> {
|
||||
*/
|
||||
ChannelFuture addListener(ChannelFutureListener listener);
|
||||
|
||||
/**
|
||||
* Adds the specified listeners to this future. The
|
||||
* specified listeners are notified when this future is
|
||||
* {@linkplain #isDone() done}. If this future is already
|
||||
* completed, the specified listeners are notified immediately.
|
||||
*/
|
||||
ChannelFuture addListeners(ChannelFutureListener... listeners);
|
||||
|
||||
/**
|
||||
* Removes the specified listener from this future.
|
||||
* The specified listener is no longer notified when this
|
||||
@ -259,6 +267,15 @@ public interface ChannelFuture extends Future<Void> {
|
||||
*/
|
||||
ChannelFuture removeListener(ChannelFutureListener listener);
|
||||
|
||||
/**
|
||||
* Removes the specified listeners from this future.
|
||||
* The specified listeners are no longer notified when this
|
||||
* future is {@linkplain #isDone() done}. If the specified
|
||||
* listeners are not associated with this future, this method
|
||||
* does nothing and returns silently.
|
||||
*/
|
||||
ChannelFuture removeListeners(ChannelFutureListener... listeners);
|
||||
|
||||
/**
|
||||
* Waits for this future until it is done, and rethrows the cause of the failure if this future
|
||||
* failed. If the cause of the failure is a checked exception, it is wrapped with a new
|
||||
|
@ -46,12 +46,32 @@ public abstract class CompleteChannelFuture implements ChannelFuture {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture addListeners(ChannelFutureListener... listeners) {
|
||||
if (listeners == null) {
|
||||
throw new NullPointerException("listeners");
|
||||
}
|
||||
for (ChannelFutureListener l: listeners) {
|
||||
if (l == null) {
|
||||
break;
|
||||
}
|
||||
DefaultChannelFuture.notifyListener(this, l);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListener(ChannelFutureListener listener) {
|
||||
// NOOP
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListeners(ChannelFutureListener... listeners) {
|
||||
// NOOP
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture await() throws InterruptedException {
|
||||
if (Thread.interrupted()) {
|
||||
|
@ -143,6 +143,21 @@ public class DefaultChannelFuture extends FlushCheckpoint implements ChannelFutu
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture addListeners(ChannelFutureListener... listeners) {
|
||||
if (listeners == null) {
|
||||
throw new NullPointerException("listeners");
|
||||
}
|
||||
|
||||
for (ChannelFutureListener l: listeners) {
|
||||
if (l == null) {
|
||||
break;
|
||||
}
|
||||
addListener(l);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListener(ChannelFutureListener listener) {
|
||||
if (listener == null) {
|
||||
@ -170,6 +185,21 @@ public class DefaultChannelFuture extends FlushCheckpoint implements ChannelFutu
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListeners(ChannelFutureListener... listeners) {
|
||||
if (listeners == null) {
|
||||
throw new NullPointerException("listeners");
|
||||
}
|
||||
|
||||
for (ChannelFutureListener l: listeners) {
|
||||
if (l == null) {
|
||||
break;
|
||||
}
|
||||
removeListener(l);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture sync() throws InterruptedException {
|
||||
await();
|
||||
|
@ -41,12 +41,24 @@ public class VoidChannelFuture implements ChannelFuture.Unsafe {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture addListeners(final ChannelFutureListener... listeners) {
|
||||
fail();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListener(ChannelFutureListener listener) {
|
||||
// NOOP
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture removeListeners(ChannelFutureListener... listeners) {
|
||||
// NOOP
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture await() throws InterruptedException {
|
||||
if (Thread.interrupted()) {
|
||||
|
Loading…
Reference in New Issue
Block a user