package framework.network;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
//import android.os.AsyncTask;
//import android.util.Log;
abstract public class HttpAsyncConnection extends Thread{
private HttpURLConnection conn = null;
private String baseUrl = null;
private String queryParams = "";
private String pathParams = "";
private String formParams = "";
private CallBack callBack = null;
private String method;
private static String clientSessionID = null;
public HttpAsyncConnection(String url) {
baseUrl = url;
}
public void doPost() {
setMethod("POST");
start();
}
public void doGet() {
setMethod("GET");
start();
}
public void doPut() {
setMethod("PUT");
start();
}
public void doDelete() {
setMethod("DELETE");
start();
}
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
private void setMethod(String method) {
this.method = method;
}
public void run() {
doAnything();
onPostExecute(doReceive());
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
public void onPostExecute(String response) {
try {
if (callBack != null) callBack.onResponse(response);
} catch (Exception e) {
// TODO: handle exception
//Log.d("error", "エラー!");
}
}
// request
public void doAnything() {
try {
if(conn == null) {
if(queryParams == null || queryParams.length() == 0){
conn = (HttpURLConnection) new URL(baseUrl + pathParams).openConnection();
} else {
conn = (HttpURLConnection) new URL(baseUrl + pathParams + "?" + queryParams).openConnection();
}
}
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
// POST or GET or PUT or DELETE
conn.setRequestMethod(method);
if (formParams.length() > 0) {
conn.setDoOutput(true);
if(clientSessionID != null) {
conn.setRequestProperty("Cookie", clientSessionID);
}
OutputStream out = conn.getOutputStream();
out.write(formParams.getBytes("UTF-8"));
out.flush();
out.close();
formParams = "";
}
pathParams = "";
queryParams = "";
conn.connect();
if(clientSessionID == null ) {
clientSessionID = conn.getHeaderField("Set-Cookie");
}
} catch (IOException e) {
notConnection();
e.printStackTrace();
}
}
// response
public String doReceive() {
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder builder = new StringBuilder();
while((line = reader.readLine()) != null)
builder.append(line);
reader.close();
if (conn != null) conn.disconnect();
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
if (conn != null) conn.disconnect();
return null;
}
}
public void notConnection(){};
/**
* param set
* @param key
* @param value
*/
public void addQueryParam(String key, String value) {
if(queryParams.length() > 0) {
queryParams += ("&");
}
queryParams += (key + "=" + value);
}
public void addFormParam(String key, String value) {
if(formParams.length() > 0) {
formParams += "&";
}
formParams += (key + "=" + value);
}
public void addPathParam(String param){
pathParams += "/" + param;
}
}