summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/TcpConnector.java
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2007-06-07 17:01:30 +0000
committerDwayne Boone <dwayne@zeroc.com>2007-06-07 17:01:30 +0000
commita737fcdae3a825d1a3df353a08df3c12285cde43 (patch)
treece5c2f7aed6194cb4d94cb07e00b7380bc320e7b /java/src/IceInternal/TcpConnector.java
parentAdded missing IComparable (diff)
downloadice-a737fcdae3a825d1a3df353a08df3c12285cde43.tar.bz2
ice-a737fcdae3a825d1a3df353a08df3c12285cde43.tar.xz
ice-a737fcdae3a825d1a3df353a08df3c12285cde43.zip
More changes for bug 1996
Diffstat (limited to 'java/src/IceInternal/TcpConnector.java')
-rw-r--r--java/src/IceInternal/TcpConnector.java90
1 files changed, 88 insertions, 2 deletions
diff --git a/java/src/IceInternal/TcpConnector.java b/java/src/IceInternal/TcpConnector.java
index eeff5b96501..82776427b96 100644
--- a/java/src/IceInternal/TcpConnector.java
+++ b/java/src/IceInternal/TcpConnector.java
@@ -9,8 +9,10 @@
package IceInternal;
-final class TcpConnector implements Connector
+final class TcpConnector implements Connector, java.lang.Comparable
{
+ final static short TYPE = 1;
+
public Transceiver
connect(int timeout)
{
@@ -34,25 +36,109 @@ final class TcpConnector implements Connector
return new TcpTransceiver(_instance, fd);
}
+ public short
+ type()
+ {
+ return TYPE;
+ }
+
public String
toString()
{
return Network.addrToString(_addr);
}
+ public int
+ hashCode()
+ {
+ return _hashCode;
+ }
+
//
// Only for use by TcpEndpoint
//
- TcpConnector(Instance instance, java.net.InetSocketAddress addr)
+ TcpConnector(Instance instance, java.net.InetSocketAddress addr, int timeout, String connectionId)
{
_instance = instance;
_traceLevels = instance.traceLevels();
_logger = instance.initializationData().logger;
_addr = addr;
+ _timeout = timeout;
+ _connectionId = connectionId;
+
+ _hashCode = _addr.getAddress().getHostAddress().hashCode();
+ _hashCode = 5 * _hashCode + _addr.getPort();
+ _hashCode = 5 * _hashCode + _timeout;
+ _hashCode = 5 * _hashCode + _connectionId.hashCode();
}
+ //
+ // Compare connectors for sorting purposes
+ //
+ public boolean
+ equals(java.lang.Object obj)
+ {
+ return compareTo(obj) == 0;
+ }
+
+ public int
+ compareTo(java.lang.Object obj) // From java.lang.Comparable
+ {
+ TcpConnector p = null;
+
+ try
+ {
+ p = (TcpConnector)obj;
+ }
+ catch(ClassCastException ex)
+ {
+ try
+ {
+ Connector c = (Connector)obj;
+ return type() < c.type() ? -1 : 1;
+ }
+ catch(ClassCastException ee)
+ {
+ assert(false);
+ }
+ }
+
+ if(this == p)
+ {
+ return 0;
+ }
+
+ if(_timeout < p._timeout)
+ {
+ return -1;
+ }
+ else if(p._timeout < _timeout)
+ {
+ return 1;
+ }
+
+ if(!_connectionId.equals(p._connectionId))
+ {
+ return _connectionId.compareTo(p._connectionId);
+ }
+
+ if(_timeout < p._timeout)
+ {
+ return -1;
+ }
+ else if(p._timeout < _timeout)
+ {
+ return 1;
+ }
+
+ return Network.compareAddress(_addr, p._addr);
+ }
+
private Instance _instance;
private TraceLevels _traceLevels;
private Ice.Logger _logger;
private java.net.InetSocketAddress _addr;
+ private int _timeout;
+ private String _connectionId = "";
+ private int _hashCode;
}