/*
 * "Grundkurs Programmieren in Java - Band 2 (2. Auflage, 2006)I"
 * 2003-2006, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe ? (Version 2.0)
 * (c) 2003-2006 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 */

import java.io.*;
import java.net.*;
class CDVerbindung extends Thread {
  Socket sock;
  PrintWriter sockOut;
  BufferedReader sockIn;
  static final String LIST = "list", TRACKS = "tracks";
  CDVerbindung(Socket sock) {
    this.sock = sock; 
    try {
      sockIn = new BufferedReader(new InputStreamReader(
                                       sock.getInputStream()));
      sockOut = new PrintWriter(sock.getOutputStream(), true);
    } 
    catch (IOException e) {
      protokolliere("Ausnahme beim Verbindungsaufbau: " + e);
    }
  }
  void protokolliere(String action) {
    System.out.println("[" + sock.getInetAddress() + ":" 
                                 + sock.getPort() + ": " 
                                 + action + "]");
  }
  public void run() {
    try {
      protokolliere("neue Verbindung");
      String clientAnfrage;
      while ((clientAnfrage = sockIn.readLine()) != null) {
        if (clientAnfrage.equalsIgnoreCase(LIST)) 
          {
            protokolliere("sende Verzeichnis der CDs");
            String[] verzeichnis = new File("cdArchiv").list();
            for (int i = 0; i < verzeichnis.length; i++) 
              sockOut.println(verzeichnis[i]);
          } 
        else if (clientAnfrage.startsWith(TRACKS)) 
          {
            String cd = clientAnfrage.substring(TRACKS.length() + 1).trim();
            protokolliere("sende Tracks der CD " + cd);
            BufferedReader fileIn;
            try {
              fileIn = new BufferedReader(new FileReader("cdArchiv/" + cd));
            } 
            catch (FileNotFoundException e) { 
              continue; 
            }                    
            while ((cd = fileIn.readLine()) != null)
              sockOut.println(cd);
            fileIn.close();
          }
      }
      sock.close();
      protokolliere("Verbindung unterbrochen");
    } 
    catch (IOException e) { 
    } 
  }
}
