Start work on a little spit and polish, with cleaner exceptions.

This commit is contained in:
md_5 2013-03-09 16:35:59 +11:00
parent b4d104d258
commit 0ce02251d4
11 changed files with 73 additions and 5 deletions

View File

@ -1,6 +1,9 @@
package net.md_5.bungee;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelOption;
import io.netty.channel.socket.nio.NioSocketChannel;
import java.net.InetSocketAddress;
import java.util.Queue;
@ -48,8 +51,20 @@ public class BungeeServerInfo extends ServerInfo
.channel( NioSocketChannel.class )
.group( BungeeCord.getInstance().eventLoops )
.handler( PipelineUtils.BASE )
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000 ) // TODO: Configurable
.remoteAddress( getAddress() )
.connect()
.channel().pipeline().get( HandlerBoss.class ).setHandler( new PingHandler( callback ) );
.addListener( new ChannelFutureListener()
{
@Override
public void operationComplete(ChannelFuture future) throws Exception
{
if ( !future.isSuccess() )
{
callback.done( null, future.cause() );
}
}
} )
.channel().pipeline().get( HandlerBoss.class ).setHandler( new PingHandler( this, callback ) );
}
}

View File

@ -99,7 +99,7 @@ public class ServerConnector extends PacketHandler
target.addPlayer( user );
user.setServer( server );
ch.pipeline().get( HandlerBoss.class ).setHandler( new DownstreamBridge( bungee, user ) );
ch.pipeline().get( HandlerBoss.class ).setHandler( new DownstreamBridge( bungee, user, server ) );
}
thisState = State.FINISHED;
@ -119,4 +119,10 @@ public class ServerConnector extends PacketHandler
{
throw new KickException( kick.message );
}
@Override
public String toString()
{
return "[" + user.getName() + "] <-> ServerConnector [" + target.getName() + "]";
}
}

View File

@ -7,6 +7,7 @@ import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.socket.nio.NioSocketChannel;
import java.net.InetSocketAddress;
import java.util.Collection;
@ -114,6 +115,7 @@ public final class UserConnection implements ProxiedPlayer
ch.pipeline().get( HandlerBoss.class ).setHandler( new ServerConnector( bungee, UserConnection.this, target ) );
}
} )
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000 ) // TODO: Configurable
.remoteAddress( target.getAddress() )
.connect().addListener( new ChannelFutureListener()
{
@ -128,6 +130,9 @@ public final class UserConnection implements ProxiedPlayer
{
sendMessage( ChatColor.RED + "Could not connect to target server, you have been moved to the default server" );
connect( def, false );
} else
{
disconnect( "Server down, could not connect to default!" );
}
}
}

View File

@ -11,6 +11,7 @@ import net.md_5.bungee.Util;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.api.event.ChatEvent;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.packet.Packet0KeepAlive;
@ -26,6 +27,7 @@ public class DownstreamBridge extends PacketHandler
private final ProxyServer bungee;
private final UserConnection con;
private final Server server;
@Override
public void handle(ByteBuf buf) throws Exception
@ -196,4 +198,10 @@ public class DownstreamBridge extends PacketHandler
con.disconnect( "[Kicked] " + kick.message );
throw new CancelSendSignal();
}
@Override
public String toString()
{
return "[" + con.getName() + "] <-> DownstreamBridge <-> [" + server.getInfo().getName() + "]";
}
}

View File

@ -240,4 +240,10 @@ public class InitialHandler extends PacketHandler implements PendingConnection
{
return (InetSocketAddress) ch.remoteAddress();
}
@Override
public String toString()
{
return "[" + ( ( getName() != null ) ? getName() : getAddress() ) + "] <-> InitialHandler";
}
}

View File

@ -6,6 +6,7 @@ import io.netty.channel.Channel;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.packet.PacketFFKick;
import net.md_5.bungee.packet.PacketHandler;
@ -13,6 +14,7 @@ import net.md_5.bungee.packet.PacketHandler;
public class PingHandler extends PacketHandler
{
private final ServerInfo target;
private final Callback<ServerPing> callback;
private static final ByteBuf pingBuf = Unpooled.wrappedBuffer( new byte[]
{
@ -38,4 +40,10 @@ public class PingHandler extends PacketHandler
ServerPing ping = new ServerPing( Byte.parseByte( split[1] ), split[2], split[3], Integer.parseInt( split[4] ), Integer.parseInt( split[5] ) );
callback.done( ping, null );
}
@Override
public String toString()
{
return "[Ping Handler] -> " + target.getName();
}
}

View File

@ -75,4 +75,10 @@ public class UpstreamBridge extends PacketHandler
throw new CancelSendSignal();
}
}
@Override
public String toString()
{
return "[" + con.getName() + "] -> UpstreamBridge";
}
}

View File

@ -4,6 +4,9 @@ import com.google.common.base.Preconditions;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundMessageHandlerAdapter;
import io.netty.handler.timeout.ReadTimeoutException;
import java.util.logging.Level;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.connection.CancelSendSignal;
import net.md_5.bungee.packet.DefinedPacket;
import net.md_5.bungee.packet.PacketHandler;
@ -30,6 +33,7 @@ public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<ByteBuf>
if ( handler != null )
{
handler.connected( ctx.channel() );
ProxyServer.getInstance().getLogger().log( Level.INFO, "{0} has connected", handler );
}
}
@ -38,6 +42,7 @@ public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<ByteBuf>
{
if ( handler != null )
{
ProxyServer.getInstance().getLogger().log( Level.INFO, "{0} has disconnected", handler );
handler.disconnected( ctx.channel() );
}
}
@ -69,9 +74,15 @@ public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<ByteBuf>
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
{
cause.printStackTrace();
if ( ctx.channel().isActive() )
{
if ( cause instanceof ReadTimeoutException )
{
ProxyServer.getInstance().getLogger().log( Level.WARNING, handler + " - read timed out" );
} else
{
ProxyServer.getInstance().getLogger().log( Level.SEVERE, handler + " - encountered exception", cause );
}
ctx.close();
}
}

View File

@ -6,6 +6,9 @@ import io.netty.channel.Channel;
public abstract class PacketHandler
{
@Override
public abstract String toString();
public void connected(Channel channel) throws Exception
{
}

View File

@ -22,7 +22,7 @@ public class GlobalTabList implements TabListHandler
UserConnection con = (UserConnection) player;
for ( ProxiedPlayer p : ProxyServer.getInstance().getPlayers() )
{
con.packetQueue.add( new PacketC9PlayerListItem( p.getDisplayName(), true, p.getPing() ) );
con.sendPacket(new PacketC9PlayerListItem( p.getDisplayName(), true, p.getPing() ) );
}
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), true, player.getPing() ) );
}

View File

@ -40,7 +40,7 @@ public class ServerUniqueTabList implements TabListHandler
{
for ( String username : usernames )
{
( (UserConnection) player ).packetQueue.add( new PacketC9PlayerListItem( username, false, 9999 ) );
( (UserConnection) player ).sendPacket(new PacketC9PlayerListItem( username, false, 9999 ) );
}
usernames.clear();
}