From feb64312cafabaef4ecf0fa43270f3edabc47fb5 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 16 Feb 2013 10:21:35 +1100 Subject: [PATCH] Fire events + plugin channels in server login --- .../java/net/md_5/bungee/ServerConnector.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java index 5526dc3a..9294757c 100644 --- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java +++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java @@ -3,9 +3,11 @@ package net.md_5.bungee; import com.google.common.base.Preconditions; import java.io.IOException; import java.net.Socket; +import java.util.Queue; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.event.ServerConnectedEvent; import net.md_5.bungee.packet.DefinedPacket; import net.md_5.bungee.packet.Packet1Login; import net.md_5.bungee.packet.PacketCDClientStatus; @@ -46,13 +48,13 @@ public class ServerConnector extends PacketHandler thisState = State.LOGIN; } - public static ServerConnection connect(UserConnection user, ServerInfo server, boolean retry) + public static ServerConnection connect(UserConnection user, ServerInfo info, boolean retry) { Socket socket = null; try { socket = new Socket(); - socket.connect( server.getAddress(), BungeeCord.getInstance().config.getTimeout() ); + socket.connect( info.getAddress(), BungeeCord.getInstance().config.getTimeout() ); BungeeCord.getInstance().setSocketOptions( socket ); PacketStream stream = new PacketStream( socket.getInputStream(), socket.getOutputStream(), user.stream.getProtocol() ); @@ -67,7 +69,18 @@ public class ServerConnector extends PacketHandler packet.handle( connector ); } - return new ServerConnection( socket, server, stream, connector.loginPacket ); + ServerConnection server = new ServerConnection( socket, info, stream, connector.loginPacket ); + ServerConnectedEvent event = new ServerConnectedEvent( user, server ); + ProxyServer.getInstance().getPluginManager().callEvent( event ); + + stream.write( BungeeCord.getInstance().registerChannels() ); + + Queue packetQueue = ( (BungeeServerInfo) info ).getPacketQueue(); + while ( !packetQueue.isEmpty() ) + { + stream.write( packetQueue.poll() ); + } + return server; } catch ( Exception ex ) { if ( socket != null ) @@ -80,7 +93,7 @@ public class ServerConnector extends PacketHandler } } ServerInfo def = ProxyServer.getInstance().getServers().get( user.getPendingConnection().getListener().getDefaultServer() ); - if ( retry && !server.equals( def ) ) + if ( retry && !info.equals( def ) ) { user.sendMessage( ChatColor.RED + "Could not connect to target server, you have been moved to the default server" ); return connect( user, def, false );