import java.net.*;
import java.io.*;
/** Diese Klasse repraesentiert einen einzelnen Thread,
  * ueber den eine Uhrzeitkommunikation ablaeuft.
  **/
public class SocketKommunikation extends Thread {
  /** Der verwendete Socket */
  private Socket socket;
  /** Konstruktor */
  public SocketKommunikation(Socket socket) {
    this.socket = socket;
  }
  /** Ausfuehrung der Kommunikation */
  public void run() {
    try {
      // Erzeuge die notwendigen Ein- und Ausgabestroeme
      System.out.println("Erzeuge I/O  Stroeme");
      PrintWriter out = new PrintWriter
        (socket.getOutputStream(),true);
      BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));      
      // Nun beginne mit der Kommunikation
      for (String line = in.readLine(); !line.equals("ENDE"); 
                                               line = in.readLine()) {
        // Fall 1: Test String
        if (line.equals("TEST")) {
          System.out.println("Testanfrage");
          out.println("Zeitserver Version 1.0 gefunden");
        }
        // Fall 2: Zeitanfrage
        else if (line.equals("WIESPAET")) {
          System.out.println("Zeitansage");
          out.println(System.currentTimeMillis());
        }
        // Fall 3: Unbekannt
        else {
          System.out.println("Unbekannte Anfrage: \"" + line + '\"');
          out.println("Unbekannte Anfrage");
        }
      }
    }
    // Fange eventuelle Exceptions ab
    catch(Exception e) {
      e.printStackTrace();
    }
    // Gib die Ressourcen wieder frei
    finally {
      try {
        System.out.println("Schliesse Socket");
        socket.close();
      }
      catch(IOException e) {
        e.printStackTrace();
      }
    }
  }
}
