
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

/**
 *
 * @author  Mark Donnermeyer
 */
public class ChatClient extends java.applet.Applet implements ActionListener, Observer {
    TextArea other;
    TextField own;
    TextField name;
    Button send;
    SocketHandler handler;
    
    /**
     * Layout des Client erstellen und einen Kommunikationskanal
     * zum Server öffnen
     */
    public void init() {
        other = new TextArea();
        own = new TextField();
        name = new TextField("Unbenannt");
        send = new Button("Senden");
        send.addActionListener(this);
        
        Panel south = new Panel(new BorderLayout());
        south.add("West", name);
        south.add("Center", own);
        south.add("East", send);
        
        setLayout(new BorderLayout());
        add("Center", other);
        add("South", south);
        System.err.println(this.getDocumentBase().getHost());
        
        try {
            String host = this.getDocumentBase().getHost();
            // Wenn das Applet nicht über einen Webserver geladen
            // wurde, dann ist kein Host definiert.
            if (host == null || host.equals(""))
                host = "localhost";
            handler = new SocketHandler(new Socket(host, 8090));
            handler.addObserver(this);
            Thread thread = new Thread(handler);
            thread.start();
        }
        catch (Exception e) {
            other.setText("Dieses Applet muss von einem Webserver geladen werden!");
        }
    }
    
    /**
     * Der Benutzer schreibt einen Satz
     */
    public void actionPerformed(ActionEvent ev) {
        try {
            handler.write(name.getText() + ": " + own.getText());
            own.setText("");
        }
        catch (Exception ex) { ex.printStackTrace(); }
    }
    
    /**
     * Ein Satz wird vom Server geliefert.
     */
    public void update(Observable o, Object arg) {
        other.setText(other.getText() + arg + "\n");
    }
}
