Mercurial > hg > Applications > TightVNC_orginal
view src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java @ 44:d4663dfd91ae
add reconnection process when the connection fails.
author | one |
---|---|
date | Sun, 18 Nov 2012 18:47:14 +0900 |
parents | 6687aa9dd55e |
children | 20326a4b9d88 |
line wrap: on
line source
package jp.ac.u_ryukyu.treevnc.client; import java.io.*; import java.net.*; import com.glavsoft.viewer.Viewer; public class EchoClient { private String name; private BufferedReader is = null; private DataOutputStream os = null; private Socket echoSocket = null; private boolean runflag = false; private WaitReply waitReply; private Socket clientSocket = null; Viewer client; private int echoPort = 9999; public String parentAddress; public String parentNum; public String treeNum; public String leaderFlag; public EchoClient(String name, int echoPort) { this.echoPort = echoPort; this.name = name; } public void openport() { try { // if(echoSocket==null) echoSocket = new Socket(name, echoPort); echoSocket.setReuseAddress(true); os = new DataOutputStream(echoSocket.getOutputStream()); is = new BufferedReader(new InputStreamReader( echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: localhost"); } catch (IOException e) { System.out.println(name + " Connection Faild"); System.exit(0); } } /** * @param args * select connect port * @return */ public EchoClient requestHostName(String args) { if (echoSocket != null && os != null && is != null) { try { InetAddress addr = InetAddress.getLocalHost(); String add = new String(addr.getHostAddress()); // add = getIpV6(); os.writeBytes(add + "\n"); os.writeBytes(args + "\n"); getProxyData(is); streamClose(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } waitReply = new WaitReply(treeNum, this); waitReply.start(); } return this; } /** * Call at lost host */ public boolean lostHost() { if (echoSocket != null && os != null && is != null) { try { if (runflag) { return true; } sendDataProxy(); String checkRepetition = getProxyData2(is); if (checkRepetition.equals("stop")) { return true; } if (!(waitReply.checkPath())) { Thread.sleep(1000); reConnectionMain(echoSocket); streamClose(); } } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { return false; } catch (InterruptedException e) { e.printStackTrace(); } catch (NullPointerException e) { openport(); System.out.println("notFoundParents"); notfoundParent(); } } return true; } public boolean notfoundParent() { if (echoSocket != null && os != null && is != null) { runflag = true; try { sendDataProxy("2", parentNum, null); getProxyData(is); reConnectionMain(echoSocket); streamClose(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } } return true; } public EchoClient Interruption(Socket _clientSocket) { clientSocket = _clientSocket; BufferedReader lostis = null; try { lostis = new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); getProxyData(lostis); clientSocket.close(); } catch (IOException e) { System.out.println(e); } return this; } void getProxyData(BufferedReader is) throws IOException { if ((parentAddress = is.readLine()) != null) { System.out.println("Server: " + parentAddress); } if ((parentNum = is.readLine()) != null) { System.out.println("parent: " + parentNum); } if ((treeNum = is.readLine()) != null) { System.out.println("treenum: " + treeNum); } if ((leaderFlag = is.readLine()) != null) { System.out.println("leaderflag: " + leaderFlag); } } String getProxyData2(BufferedReader is) throws IOException { String checkRepetition; System.out.println("-------------------re----------------------------"); if ((parentAddress = is.readLine()) != null) { System.out.println("Server: " + parentAddress); } if ((parentNum = is.readLine()) != null) { System.out.println("parent:test " + parentNum); } if ((checkRepetition = is.readLine()) != null) { System.out.println("checkRepetition: " + checkRepetition); } return checkRepetition; } void reConnectionMain(Socket echoSocket) { while (true) { try { client.close(); client.setSocket(createSocketForClient(echoSocket)); client.run(); break; } catch (IOException e) { System.out.println("EchoClient L178"); continue; } } } void streamClose() throws IOException { os.close(); is.close(); echoSocket.close(); } void sendDataProxy() { if ("1".equals(leaderFlag)) { sendDataProxy("1", parentNum, treeNum); System.out.println("---------------------------------------------"); } else { sendDataProxy("3", parentNum, treeNum); System.out.println("---------------------------------------------"); } } void sendDataProxy(String type, String num, String treenum) { try { if (treenum != null) { os.writeBytes(type + "\n"); os.writeBytes(num + "\n"); os.writeBytes(treenum + "\n"); } else { os.writeBytes(type + "\n"); os.writeBytes(num + "\n"); } } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } } public void getParentName() { if (clientSocket == null) { // echo = new EchoClient(pHost, this); openport(); requestHostName("1"); // 1 is normal connection type. } else { Interruption(clientSocket); } } public void setViewer(Viewer v) { client = v; } public Socket createSocketForClient(Socket soc) throws IOException { BufferedReader is = new BufferedReader(new InputStreamReader( soc.getInputStream())); int count=0; String tempParentAddress = is.readLine(); parentNum = is.readLine(); if ("reconnection".equals(tempParentAddress)) { System.out.println("-----------------into function \n" + parentNum); while(true) try{ return new Socket(parentAddress, Integer.parseInt(parentNum)); } catch(IOException e) { try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } if(count++ > 5) break; continue; } } treeNum = is.readLine(); leaderFlag = is.readLine(); return new Socket(tempParentAddress, 5999); } }