/* */ package NET.worlds.network; /* */ /* */ import java.io.IOException; /* */ import java.io.PrintStream; /* */ import java.net.NoRouteToHostException; /* */ import java.net.Socket; /* */ import java.net.UnknownHostException; /* */ import java.util.StringTokenizer; /* */ import java.util.Vector; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ class WSConnecting /* */ implements Runnable /* */ { /* */ private WorldServer _serv; /* */ private String _host; /* */ private Vector _hosts; /* */ private int _unresolvedHosts; /* */ private int _port; /* */ private int _timeout; /* */ private int _error; /* */ private boolean _calledBack; /* */ private Vector _resolvedHosts; /* */ /* */ public WSConnecting(WorldServer serv, String host, int port, int timeout) /* */ { /* 40 */ this._serv = serv; /* 41 */ this._host = host; /* 42 */ this._hosts = new Vector(); /* 43 */ this._port = port; /* 44 */ this._timeout = timeout; /* 45 */ this._error = 0; /* */ /* */ /* 48 */ makeThread(-1); /* */ /* */ /* */ /* 52 */ StringTokenizer tok = new StringTokenizer(host, ";"); /* 53 */ while (tok.hasMoreTokens()) /* 54 */ this._hosts.addElement(tok.nextToken()); /* 55 */ this._unresolvedHosts = this._hosts.size(); /* */ /* */ /* 58 */ for (int i = 0; i < this._unresolvedHosts; i++) /* */ { /* */ /* 61 */ makeThread(i); /* */ } /* */ } /* */ /* */ private void makeThread(int index) { /* 66 */ Thread t = new Thread(this, Integer.toString(index)); /* 67 */ t.setDaemon(true); /* 68 */ t.start(); /* */ } /* */ /* */ public void run() /* */ { /* 73 */ int index = Integer.parseInt(Thread.currentThread().getName()); /* */ /* */ /* 76 */ if (index == -1) { /* */ try { /* 78 */ Thread.sleep(this._timeout * 1000); /* */ } /* */ catch (InterruptedException localInterruptedException) {} /* 81 */ synchronized (this) { /* 82 */ if (!this._calledBack) { /* 83 */ this._calledBack = true; /* 84 */ if (this._error == 0) /* 85 */ this._error = 106; /* 86 */ this._serv.setSocket(null, new VarErrorException(this._error), null); /* */ } /* */ } /* */ } /* */ /* */ /* */ /* 93 */ if (index < this._unresolvedHosts) { /* */ try { /* 95 */ String host = (String)this._hosts.elementAt(index); /* 96 */ String[] addresses = DNSLookup.lookupAll(host); /* 97 */ if (addresses.length > 1) /* */ { /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 116 */ for (int i = 0; i < addresses.length; i++) /* */ { /* 118 */ synchronized (this._hosts) { /* 119 */ int newIndex = this._hosts.size(); /* */ /* */ /* */ /* */ /* */ /* 125 */ this._hosts.addElement(addresses[i]); /* */ } /* */ /* */ int newIndex; /* */ /* 130 */ makeThread(newIndex); /* */ } /* */ /* */ } else /* 134 */ connectTo(addresses[0], false); /* */ } catch (UnknownHostException uhe) { /* 136 */ synchronized (this) { /* 137 */ if (this._error == 0) { /* 138 */ this._error = 107; /* */ /* */ } /* */ /* */ /* */ } /* */ /* */ /* */ } /* */ /* */ /* */ } /* */ else /* */ { /* */ /* 153 */ connectTo((String)this._hosts.elementAt(index), false); /* */ } /* */ } /* */ /* */ public Vector getBackupHosts() /* */ { /* 159 */ this._resolvedHosts = new Vector(); /* 160 */ for (int i = this._unresolvedHosts; i < this._hosts.size(); i++) { /* 161 */ this._resolvedHosts.addElement((String)this._hosts.elementAt(i)); /* */ } /* 163 */ return this._resolvedHosts; /* */ } /* */ /* */ private void connectTo(String host, boolean delay) { /* 167 */ Socket sock = null; /* */ /* */ try /* */ { /* 171 */ sock = new Socket(host, this._port); /* */ /* 173 */ synchronized (this) /* */ { /* */ /* */ /* 177 */ if (delay) { /* */ try { /* 179 */ wait(this._timeout * 1000 * 2 / 3); /* */ } /* */ catch (InterruptedException localInterruptedException) {} /* */ } /* */ /* 184 */ System.out.println("Connected to " + host); /* */ /* 186 */ if (!this._calledBack) { /* 187 */ this._calledBack = true; /* 188 */ this._serv.setSocket(sock, null, host); /* */ } else { /* */ try { /* 191 */ sock.close(); /* */ } /* */ catch (IOException localIOException1) {} /* */ } /* 195 */ notifyAll(); /* */ } /* */ } /* */ catch (IOException e) { /* 199 */ synchronized (this) { /* 200 */ if (this._error == 0) { /* 201 */ if (((e instanceof NoRouteToHostException)) || /* 202 */ ((e instanceof UnknownHostException))) { /* 203 */ this._error = 107; /* */ } else /* 205 */ this._error = 104; /* */ } /* 207 */ notifyAll(); /* */ } /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\network\WSConnecting.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */