/* Um diese Klasse anzuwenden , muss man die listen() Methode aufrufen. */

import JConsole;

import java.io.*;
import java.net.*;

public class JClient {

    protected Socket socket;
    protected BufferedReader in;	// Eingabestream
    protected PrintWriter out;
    private ChatWindow cw;

    public JClient(String nickName, int port, String addr, ChatWindow cw) {
        this.cw = cw;
        try {
            socket = new Socket(addr, port);// Erzeuge den Socket, um mit dem angegebenen Host und Port zu kommunizieren

            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("Verbunden mit " +		// Benutzerinformation
                socket.getInetAddress() + ":" +
                socket.getPort());

        }catch (IOException e) {System.err.println("Error: " + e);}


      try {
               // Ein Stream zum Schreiben auf dem Socket
         out = new PrintWriter(socket.getOutputStream());
      }catch (IOException e) {System.err.println("Error: " + e);}

      //Braucht man, damit ein chat moeglich ist.
      JConsole con = new JConsole(socket, cw);
        con.start();

    } // Konstruktor

    /* Diese Methode holt sich vom Socket die Eingabe und uebergibt sie an
       die receive Methode
    */
    public void listen(){

            while(true) {
            	try{
               String temp = in.readLine();
               if(!temp.equals("0")){
            	 receive(temp);
            	 System.out.println("Das kommt von in.readLine():"+temp);
               }
               /*if(send()!=null){
                 System.out.println(send());
                 out.println(send());
                 out.flush();
                 }
               */
              }catch (IOException ioe) {System.err.println("Error: " + ioe);}
            }
    }

    // alles was rein kommt, wird an die ChatWindowAusgabe uebergeben
    public void receive(String line) {
        if (line != null){
         cw.drawText(line);
         System.out.println("Das kommt aus der Client Methode receive:"+line);
        }
    }

    // alles was von der ChatWindowEingabe kommt, wird uebergeben
    // sollte Console uebernehmen
    public String send(){
      String line = cw.getNewString();
      if(!line.equals("")) return line;
      else return null;
    }


    public void finalize() {					// Schließen der Streams und des Sockets
        try {
            System.out.println("Verbindung beendet.");
            in.close();					// Eingabestream schließen
            socket.close();					// Socket schließen
        }
        catch (IOException e) {
            System.err.println("Error: " + e);
        }
    }
}
