diff --git a/pom.xml b/pom.xml index 1623896c..0d8dfef1 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ unknown - 4.0.0.CR1 + 4.0.0.CR3 UTF-8 diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java index 2d5cc40e..c8961824 100644 --- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java +++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java @@ -84,7 +84,7 @@ public class BungeeCord extends ProxyServer * Thread pools. */ public final ScheduledThreadPoolExecutor executors = new BungeeThreadPool( new ThreadFactoryBuilder().setNameFormat( "Bungee Pool Thread #%1$d" ).build() ); - public final MultithreadEventLoopGroup eventLoops = new NioEventLoopGroup( 0, new ThreadFactoryBuilder().setNameFormat( "Netty IO Thread #%1$d" ).build() ); + public final MultithreadEventLoopGroup eventLoops = new NioEventLoopGroup( NioEventLoopGroup.DEFAULT_EVENT_LOOP_THREADS, new ThreadFactoryBuilder().setNameFormat( "Netty IO Thread #%1$d" ).build() ); /** * locations.yml save thread. */ @@ -282,7 +282,7 @@ public class BungeeCord extends ProxyServer } getLogger().info( "Closing IO threads" ); - eventLoops.shutdown(); + eventLoops.shutdownGracefully(); getLogger().info( "Saving reconnect locations" ); reconnectHandler.save(); 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 a924e379..32a5d50e 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 @@ -6,17 +6,15 @@ public class ChannelWrapper { private final Channel ch; - private final ReusableChannelPromise promise; public ChannelWrapper(Channel ch) { this.ch = ch; - this.promise = new ReusableChannelPromise( ch ); } public void write(Object packet) { - ch.write( packet, promise ); + ch.write( packet, ch.voidPromise() ); } public Channel getHandle() diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PacketDecoder.java b/proxy/src/main/java/net/md_5/bungee/netty/PacketDecoder.java index 55572665..564b88c0 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/PacketDecoder.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/PacketDecoder.java @@ -1,6 +1,7 @@ package net.md_5.bungee.netty; import io.netty.buffer.ByteBuf; +import io.netty.buffer.MessageBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ReplayingDecoder; import lombok.AllArgsConstructor; @@ -25,7 +26,7 @@ public class PacketDecoder extends ReplayingDecoder private int protocol; @Override - protected byte[] decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception + protected void decode(ChannelHandlerContext ctx, ByteBuf in, MessageBuf out) throws Exception { // While we have enough data while ( true ) @@ -47,7 +48,7 @@ public class PacketDecoder extends ReplayingDecoder // Checkpoint our state incase we don't have enough data for another packet checkpoint(); // Store our decoded message - return buf; + out.add( buf ); } } } 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 deleted file mode 100644 index f420909a..00000000 --- a/proxy/src/main/java/net/md_5/bungee/netty/ReusableChannelPromise.java +++ /dev/null @@ -1,179 +0,0 @@ -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." ); - } -}