diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2007-06-07 17:01:30 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2007-06-07 17:01:30 +0000 |
commit | a737fcdae3a825d1a3df353a08df3c12285cde43 (patch) | |
tree | ce5c2f7aed6194cb4d94cb07e00b7380bc320e7b /java/src/IceInternal/TcpConnector.java | |
parent | Added missing IComparable (diff) | |
download | ice-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.java | 90 |
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; } |