package com.zsoft.SignalA.Transport; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; import com.zsoft.SignalA.ConnectionBase; public class TransportHelper { private static final String TAG = "TransportHelper"; public static ProcessResult ProcessResponse(ConnectionBase connection, JSONObject response) { ProcessResult result = new ProcessResult(); if (connection == null) { //throw new Exception("connection"); } if (response == null) { return result; } String newMessageId = null; JSONArray messagesArray = null; String groupsToken = null; //JSONObject transportData = null; String info = null; result.timedOut = response.optInt("T") == 1; result.disconnected = response.optInt("D") == 1; newMessageId = response.optString("C"); messagesArray = response.optJSONArray("M"); groupsToken = response.optString("G", null); info = response.optString("I", null); if(info != null) { connection.setMessage(response); return result; } if(result.disconnected) { return result; } if(groupsToken!=null) { connection.setGroupsToken(groupsToken); } if (messagesArray != null) { for (int i = 0; i < messagesArray.length(); i++) { try { connection.setMessage(messagesArray.getJSONObject(i)); } catch (JSONException e) { Log.e(TAG, "Error when calling setMessage on connection.",e); } } connection.setMessageId(newMessageId); } return result; } public static String GetReceiveQueryString(ConnectionBase connection, String data, String transport) { if (connection == null) { throw new IllegalArgumentException("connection"); } if (transport == null) { throw new IllegalArgumentException("transport"); } // ?transport={0}&connectionToken={1}&messageId={2}&groupsToken={3}&connectionData={4}{5} String qs = "?transport="; qs += transport; try { qs += "&connectionToken=" + URLEncoder.encode(connection.getConnectionToken(), "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding connectionToken."); } if(connection.getMessageId()!=null) { try { qs += "&messageId=" + URLEncoder.encode(connection.getMessageId(), "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding messageid."); } } if (connection.getGroupsToken() != null && connection.getGroupsToken().length() > 0) { try { qs += "&groupsToken=" + URLEncoder.encode(connection.getGroupsToken(), "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding groupsToken."); } } if (data != null) { try { qs += "&connectionData=" + URLEncoder.encode(data, "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding connectionData."); } } if(connection.getQueryString() != null && connection.getQueryString().length() > 0) { try { qs += "&" + URLEncoder.encode(connection.getQueryString(), "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding querystring."); } } return qs; } public static ArrayList<String> ToArrayList(JSONArray jsonArray) { ArrayList<String> list = null; if (jsonArray != null) { int len = jsonArray.length(); list = new ArrayList<String>(len); for (int i=0;i<len;i++){ Object o = jsonArray.opt(i); if(o!=null) list.add(o.toString()); } } return list; } public static String AppendCustomQueryString(ConnectionBase connection, String baseUrl) { if (connection == null) { throw new IllegalArgumentException("connection"); } if (baseUrl == null) { baseUrl = ""; } String appender = "", customQuery = connection.getQueryString(), qs = ""; if (customQuery!=null && customQuery.length()>0) { char firstChar = customQuery.charAt(0); // If the custom query string already starts with an ampersand or question mark // then we dont have to use any appender, it can be empty. if (firstChar != '?' && firstChar != '&') { appender = "?"; if (baseUrl.contains(appender)) { appender = "&"; } } qs += appender + customQuery; } return qs; } }