diff --git a/pom.xml b/pom.xml index 83e21794..0d8dfef1 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ unknown - 4.0.0.Final-SNAPSHOT + 4.0.0.CR3 UTF-8 diff --git a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java index 983dcf7f..7867165e 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java @@ -9,17 +9,19 @@ public class ChannelWrapper private final Channel ch; @Getter private volatile boolean closed; + private final ReusableChannelPromise promise; public ChannelWrapper(Channel ch) { this.ch = ch; + this.promise = new ReusableChannelPromise( ch ); } public synchronized void write(Object packet) { if ( !closed ) { - ch.write( packet, ch.voidPromise() ); + ch.write( packet, promise ); } } diff --git a/proxy/src/main/java/net/md_5/bungee/netty/ReusableChannelPromise.java b/proxy/src/main/java/net/md_5/bungee/netty/ReusableChannelPromise.java new file mode 100644 index 00000000..f420909a --- /dev/null +++ b/proxy/src/main/java/net/md_5/bungee/netty/ReusableChannelPromise.java @@ -0,0 +1,179 @@ +package net.md_5.bungee.netty; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelPromise; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class ReusableChannelPromise implements ChannelPromise +{ + + private final Channel ch; + + @Override + public Channel channel() + { + return ch; + } + + @Override + public ChannelPromise setSuccess(Void result) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise setSuccess() + { + return this; + } + + @Override + public boolean trySuccess() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise setFailure(Throwable cause) + { + return this; + } + + @Override + public ChannelPromise addListener(GenericFutureListener> listener) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise addListeners(GenericFutureListener>... listeners) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise removeListener(GenericFutureListener> listener) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise removeListeners(GenericFutureListener>... listeners) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise sync() throws InterruptedException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise syncUninterruptibly() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise await() throws InterruptedException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public ChannelPromise awaitUninterruptibly() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean isSuccess() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public Throwable cause() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean await(long timeout, TimeUnit unit) throws InterruptedException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean await(long timeoutMillis) throws InterruptedException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean awaitUninterruptibly(long timeout, TimeUnit unit) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean awaitUninterruptibly(long timeoutMillis) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public Void getNow() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean isCancelled() + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean isDone() + { + return false; + } + + @Override + public Void get() throws InterruptedException, ExecutionException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public Void get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean trySuccess(Void result) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } + + @Override + public boolean tryFailure(Throwable cause) + { + throw new UnsupportedOperationException( "Not supported yet." ); + } +}