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

// 這裡是引用java的類別庫
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader; // 引用串流功能 
import java.io.DataInputStream;
import java.io.IOException; // 引用IO例外功能
import java.io.InputStreamReader; // 引用輸入串流讀取功能 
import java.io.PrintWriter;
import java.net.InetAddress; // 引用網路IP位址功能
import java.net.Socket; // 引用Socket網路功能

public class ClientSocketDemo1 extends Activity {

	ImageButton imgButton;
	TextView TextView01;
	

	public static final int BUFFER_SIZE = 1024;
	private Socket socket = null;
	private PrintWriter out = null;
	private BufferedReader in = null;
	protected DataInputStream in2;
	// 程式進入點
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		imgButton = (ImageButton) findViewById(R.id.imageButton);
		imgButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				
				TextView01.setText(receiveDataFromServerLine());
			}
		});

		// 文字方塊
		TextView01 = (TextView) findViewById(R.id.TextView01);

		// 用來存放伺服器IP位址的變數
		InetAddress serverIp;

		// 嘗試連接Server
		try {
			// 設定IP bs2.to 140.112.172.2
			serverIp = InetAddress.getByName("140.112.172.2");

			// 設定port
			int serverPort = 23;

			// 初始socket連接
			socket = new Socket(serverIp, serverPort);

			out = new PrintWriter(socket.getOutputStream());
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			in2 = new DataInputStream(this.socket.getInputStream());
			// 關閉連線
			//socket.close();
		} catch (IOException e) {
			// 出錯後顯示錯誤訊息
			TextView01.setText("Connect error.");
		}
	}
	private void disConnectWithServer() {
        if (socket != null) {
            if (socket.isConnected()) {
                try {
                    in.close();
                    out.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
	//http://stackoverflow.com/questions/5893911/android-client-socket-how-to-read-data
	public String receiveDataFromServer() {
		try {
			String message = "";
			int charsRead = 0;
			char[] buffer = new char[BUFFER_SIZE];

			if ((charsRead = in.read(buffer)) != -1) {
				message += new String(buffer).substring(0, charsRead);
			}

			//disConnectWithServer(); // disconnect server
			return message;
		} catch (IOException e) {
			return "Error receiving response:  " + e.getMessage();
		}
	}
	
	public String receiveDataFromServerLine() {
		try {
			
			return in.readLine();
		} catch (IOException e) {
			return "Error receiving response:  " + e.getMessage();
		}
	}
	public String receiveDataFromServerLine2() {
		try {
			
			return in2.readUTF();
		} catch (IOException e) {
			return "Error receiving response:  " + e.getMessage();
		}
	}
}