Proper equals on servers

This commit is contained in:
md_5 2013-04-12 08:22:17 +10:00
parent 5d1a2c59a7
commit 5592f81e97
5 changed files with 24 additions and 11 deletions

View File

@ -4,6 +4,7 @@ import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Objects;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Synchronized; import lombok.Synchronized;
@ -95,4 +96,19 @@ public abstract class ServerInfo
{ {
return !restricted || player.hasPermission( "bungeecord.server." + name ); return !restricted || player.hasPermission( "bungeecord.server." + name );
} }
@Override
public boolean equals(Object obj)
{
return ( obj instanceof ServerInfo ) && Objects.equals( getAddress(), ( (ServerInfo) obj ).getAddress() );
}
@Override
public int hashCode()
{
int hash = 7;
hash = 73 * hash + Objects.hashCode( getClass() );
hash = 73 * hash + Objects.hashCode( getAddress() );
return hash;
}
} }

View File

@ -4,6 +4,7 @@ import com.google.common.base.Preconditions;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import java.util.Objects;
import java.util.Queue; import java.util.Queue;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
@ -165,7 +166,7 @@ public class ServerConnector extends PacketHandler
public void handle(PacketFFKick kick) throws Exception public void handle(PacketFFKick kick) throws Exception
{ {
ServerInfo def = bungee.getServerInfo( user.getPendingConnection().getListener().getFallbackServer() ); ServerInfo def = bungee.getServerInfo( user.getPendingConnection().getListener().getFallbackServer() );
if ( target == def ) if ( Objects.equals( target, def) )
{ {
def = null; def = null;
} }

View File

@ -13,6 +13,7 @@ import java.net.InetSocketAddress;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.logging.Level; import java.util.logging.Level;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
@ -100,13 +101,7 @@ public final class UserConnection implements ProxiedPlayer
@Override @Override
public void connect(ServerInfo target) public void connect(ServerInfo target)
{ {
if ( getServer() != null && getServer().getInfo() == target ) connect( target, false );
{
sendMessage( ChatColor.RED + "Cannot connect to server you are already on!" );
} else
{
connect( target, false );
}
} }
public void connectNow(ServerInfo target) public void connectNow(ServerInfo target)
@ -121,10 +116,9 @@ public final class UserConnection implements ProxiedPlayer
ServerConnectEvent event = new ServerConnectEvent( this, info ); ServerConnectEvent event = new ServerConnectEvent( this, info );
ProxyServer.getInstance().getPluginManager().callEvent( event ); ProxyServer.getInstance().getPluginManager().callEvent( event );
final ServerInfo target = event.getTarget(); // Update in case the event changed target final ServerInfo target = event.getTarget(); // Update in case the event changed target
if ( getServer() != null && getServer().getInfo() == target ) if ( getServer() != null && Objects.equals( getServer().getInfo(), target ) )
{ {
sendMessage( ChatColor.RED + "Cannot connect to server you are already on!" ); sendMessage( ChatColor.RED + "Cannot connect to server you are already on!" );
return;
} }
new Bootstrap() new Bootstrap()
.channel( NioSocketChannel.class ) .channel( NioSocketChannel.class )

View File

@ -4,6 +4,7 @@ import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import java.util.Objects;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.md_5.bungee.EntityMap; import net.md_5.bungee.EntityMap;
import net.md_5.bungee.ServerConnection; import net.md_5.bungee.ServerConnection;
@ -314,7 +315,7 @@ public class DownstreamBridge extends PacketHandler
public void handle(PacketFFKick kick) throws Exception public void handle(PacketFFKick kick) throws Exception
{ {
ServerInfo def = bungee.getServerInfo( con.getPendingConnection().getListener().getFallbackServer() ); ServerInfo def = bungee.getServerInfo( con.getPendingConnection().getListener().getFallbackServer() );
if ( server.getInfo() == def ) if ( Objects.equals( server.getInfo(), def ) )
{ {
def = null; def = null;
} }

View File

@ -38,6 +38,7 @@ public class BungeeScheduler implements TaskScheduler
Set<ScheduledTask> toRemove = new HashSet<>(); Set<ScheduledTask> toRemove = new HashSet<>();
for ( ScheduledTask task : tasks.valueCollection() ) for ( ScheduledTask task : tasks.valueCollection() )
{ {
// TODO: proper checking?
if ( task.getOwner() == plugin ) if ( task.getOwner() == plugin )
{ {
toRemove.add( task ); toRemove.add( task );