package ccc.ClientSocketDemo1; // 這是命名空間

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

// 
public class ClientSocketDemo1 extends Activity {
	public static Handler mHandler = new Handler();
	TextView TextView01; // 用來顯示文字訊息
	EditText EditText01; // 文字方塊
	EditText EditText02; // 文字方塊
	String tmp; // 暫存文字訊息
	String stmp = "";
	Socket clientSocket; // 客戶端socket
	BufferedWriter bw;
	BufferedReader br;
	private PrintStream out;
	ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
	byte[] buffer = new byte[128];

	InputStream InputStream;
	int read;

	Boolean flag;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 從資源檔裡取得位址後強制轉型成文字方塊
		TextView01 = (TextView) findViewById(R.id.TextView01);
		TextView01.setMovementMethod(new ScrollingMovementMethod());
		EditText01 = (EditText) findViewById(R.id.EditText01);
		EditText02 = (EditText) findViewById(R.id.EditText02);
		// 從資源檔裡取得位址後強制轉型成按鈕
		Button button1 = (Button) findViewById(R.id.Button01);

		InetAddress serverIp;
		int serverPort = 23;
		try {
			serverIp = InetAddress.getByName("140.112.172.2");

			clientSocket = new Socket(serverIp, serverPort);
			InputStream = clientSocket.getInputStream();
			out = new PrintStream(clientSocket.getOutputStream(), true);

		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Thread t = new Thread(readData);
		// 啟動執行緒
		t.start();
		// 設定按鈕的事件
		button1.setOnClickListener(new Button.OnClickListener() {
			// 當按下按鈕的時候觸發以下的方法
			public void onClick(View v) {
				// 如果已連接則
				if (clientSocket.isConnected()) {
					String ss = EditText02.getText().toString() + "\r";
					out.print(ss);
					Log.i("onClick", ss);
					TextView01.append(EditText02.getText() + "\r");
					// 將文字方塊清空
					EditText02.setText("");
				}
			}
		});

	}

	// 顯示更新訊息
	private Runnable updateText = new Runnable() {
		public void run() {

			try {

				TextView01.append(resultStream.toString("big5") + "\n");
				resultStream.reset();
				InputStream.reset();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			resultStream.reset();
		}
	};

	// 取得網路資料
	private Runnable readData = new Runnable() {
		public void run() {
			try {
				// 當連線後
				flag = false;
				while (clientSocket.isConnected()) {
					read = InputStream.read(buffer);
					if (read > 0) {
						resultStream.write(buffer, 0, read);
						mHandler.post(updateText);
					}
				}

			} catch (IOException e) {

			}
		}
	};

}