From 475571986c0b8be11d9e8bb3b44ffab253fa7497 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 7 Jul 2013 13:08:25 +1000 Subject: [PATCH] Make sure packets are written before closing --- .../main/java/net/md_5/bungee/ServerConnection.java | 1 + .../java/net/md_5/bungee/netty/ChannelWrapper.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnection.java b/proxy/src/main/java/net/md_5/bungee/ServerConnection.java index 73bdc11a..555b0ff4 100644 --- a/proxy/src/main/java/net/md_5/bungee/ServerConnection.java +++ b/proxy/src/main/java/net/md_5/bungee/ServerConnection.java @@ -42,6 +42,7 @@ public class ServerConnection implements Server { if ( !ch.isClosed() ) { + // TODO: Can we just use a future here? unsafe().sendPacket( new PacketFFKick( reason ) ); ch.getHandle().eventLoop().schedule( new Runnable() { 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 df8d88ad..ca1a78da 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 @@ -2,6 +2,8 @@ package net.md_5.bungee.netty; import com.google.common.base.Preconditions; import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.MessageList; @@ -50,8 +52,14 @@ public class ChannelWrapper if ( !closed ) { closed = true; - ch.write( queue ); - ch.close(); + ch.write( queue, ch.newPromise() ).addListener( new ChannelFutureListener() + { + @Override + public void operationComplete(ChannelFuture future) throws Exception + { + ch.close(); + } + } ); } }