package object_ex;
 
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Chat_Client extends Frame{
  
  TextField textField=new TextField("");//輸入欄位
  TextArea textArea=new TextArea();//顯示欄位
  String str=null;
  object_data data = new object_data();
  
  Socket client;
  ObjectOutputStream output=null;
  ObjectInputStream input=null;
  boolean isConnected=false;
  
  public static void main(String[] args) {
    new Chat_Client().launchFrame();
  }
  
 
  public Chat_Client(){
    connect();
    new Thread(new ClientOwnThread()).start();
  }
  
  public void launchFrame(){
    this.setLocation(400,300);
    this.setSize(300,300);
    this.add(textArea,BorderLayout.NORTH);
    this.add(textField,BorderLayout.SOUTH);
    this.pack();
    textArea.setEditable(false);
    this.setVisible(true);
    
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }
    });
    
    textField.addActionListener(new TextFieldListener());
  }
  
  private void connect(){
    try {
      client=new Socket("127.0.0.1",8888);
      output=new ObjectOutputStream(client.getOutputStream());
      input=new ObjectInputStream(client.getInputStream());
      isConnected=true;
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  private void disConnect(){
    
    try {
      if(output!=null) output.close();
      if(input!=null) input.close();
      if(client!=null) client.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  
  class ClientOwnThread implements Runnable{
    public void run() {
      try {
        while(isConnected){
          data = (object_data)input.readObject();
          String str = data.getchat();
          //String str=(String)input.readObject();
          textArea.append(str+"\n");
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      finally{
        disConnect();
      }
    }
  }
  
  private class TextFieldListener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      data.setchat(textField.getText().trim());
      //str=textField.getText().trim();
      textField.setText("");
      try {
        output.writeObject(data);
        output.flush();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      
    }
  }
}