package se.nekotronic.pinger; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import android.util.Log; public class PingThread extends Thread { private PingActivity parent; private boolean quit = false; private String host; private int port; Socket socket; BufferedReader from_server; PrintWriter to_server; public PingThread(PingActivity parent, String host, int port) { this.parent = parent; this.host = host; this.port = port; } public void please_stop() { quit = true; try { to_server.flush(); socket.shutdownInput(); } catch (IOException e) { // Couldn't close. Not much we can do. parent.print("Problem closing connection"); } } public void run() { try { parent.print("Connecting to " + host + "..."); socket = new Socket(host, port); parent.print("Connected."); if (quit) return; from_server = new BufferedReader(new InputStreamReader(socket.getInputStream())); to_server = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); // true: PrintWriter is line buffered while (!quit) { Log.d("*** ReadyPinger", "Waiting for a line from the server..."); String line_from_server = from_server.readLine(); if (line_from_server == null) { parent.print("Nothing more to read from server."); quit = true; } else { parent.print("Got line from server: '" + line_from_server + "'"); } } to_server.close(); from_server.close(); socket.close(); // parent.done(); } catch (UnknownHostException e) { parent.warning("Unknown host: " + e.getMessage()); } catch (IOException e) { parent.warning("I/O Exception: " + e.getMessage()); } parent.done(); } void send(String line) { if (to_server == null) { parent.warning("Not connected yet."); } else { parent.print("Sending " + line); to_server.println(line); } } } // PingThread