package org.infinispan.server.hotrod; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Collections; import java.util.Objects; import java.util.Set; import org.infinispan.commons.marshall.AbstractExternalizer; import org.infinispan.remoting.transport.Address; /** * A Hot Rod server address * * @author Galder ZamarreƱo * @since 5.1 */ public class ServerAddress implements Address { private final String host; private final int port; public ServerAddress(String host, int port) { this.host = Objects.requireNonNull(host); this.port = port; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ServerAddress that = (ServerAddress) o; if (port != that.port) return false; return host.equals(that.host); } // // IMPORTANT NOTE: Hot Rod protocol agrees to this calculation for a node // // address hash code calculation, so any changes to the implementation // // require modification of the protocol. // override def hashCode() = Arrays.hashCode( // "%s:%d".format(host, port).getBytes(UTF8)) @Override public int hashCode() { int result = host.hashCode(); result = 31 * result + port; return result; } @Override public int compareTo(Address o) { if (o instanceof ServerAddress) { ServerAddress oa = (ServerAddress) o; int cmp = host.compareTo(oa.host); if (cmp == 0) { cmp = port - oa.port; } return cmp; } return -1; } @Override public String toString() { return "ServerAddress{" + "host='" + host + '\'' + ", port=" + port + '}'; } public String getHost() { return host; } public int getPort() { return port; } static class Externalizer extends AbstractExternalizer<ServerAddress> { @Override public Set<Class<? extends ServerAddress>> getTypeClasses() { return Collections.singleton(ServerAddress.class); } @Override public void writeObject(ObjectOutput output, ServerAddress object) throws IOException { output.writeObject(object.host); output.writeShort(object.port); } @Override public ServerAddress readObject(ObjectInput input) throws IOException, ClassNotFoundException { String host = (String) input.readObject(); int port = input.readUnsignedShort(); return new ServerAddress(host, port); } } }