]> iEval git - fonbot.git/blobdiff - src/ro/ieval/fonbot/PollServerAsyncTask.java
Add ExecutableRunnable
[fonbot.git] / src / ro / ieval / fonbot / PollServerAsyncTask.java
index 7e95303090df4f2a6cfc5d58006d211cd0d222c9..07c014b0979c9245e17aa1f83b71b5917c6c9cdf 100644 (file)
@@ -15,9 +15,14 @@ import org.json.JSONException;
 import org.json.JSONObject;
 
 import ro.ieval.fonbot.Address.Protocol;
+import android.content.Context;
 import android.os.AsyncTask;
+import android.preference.PreferenceManager;
+import android.util.Base64;
 import android.util.Log;
 
+import com.google.android.gcm.GCMRegistrar;
+
 /*
  * Copyright © 2013 Marius Gavrilescu
  * 
@@ -76,33 +81,57 @@ public final class PollServerAsyncTask extends AsyncTask<Void, Void, List<PollSe
                }
        }
 
+       /** Context instance */
+       private final Context context;
+
+       /**
+        * Constructs a PollServerAsyncTask.
+        *
+        * @param context Context instance
+        */
+       public PollServerAsyncTask(final Context context) {
+               this.context=context;
+       }
+
        @Override
        protected List<Command> doInBackground(final @Nullable Void... params) {
                Log.d(getClass().getName(), "Polling server");
                final List<Command> commands=new ArrayList<Command>(10);
                try {
-                       final URL url=new URL("http://ieval.ro:7777/get");
+                       final URL url=Utils.getServerURL(toNonNull(context),"/get");
                        final HttpURLConnection conn=(HttpURLConnection) url.openConnection();
-                       conn.setRequestProperty("X-ID", FonBotApplication.instance.regID);
+                       conn.setRequestProperty("X-ID", GCMRegistrar.getRegistrationId(context));
+                       final String user=PreferenceManager.getDefaultSharedPreferences(context).getString("username", null);
+                       final String password=PreferenceManager.getDefaultSharedPreferences(context).getString("password", null);
+                       if(user == null || password == null)
+                               return commands;
+
+                       conn.setRequestProperty("Authorization", "Basic "+Base64.encodeToString(
+                                       (user+':'+password).getBytes(), Base64.NO_WRAP));
                        conn.connect();
-                       final byte[] buf=new byte[4096*1024];
                        Log.d(getClass().getName(), "Server poll got response code "+conn.getResponseCode()+" and message "+conn.getResponseMessage());
                        if(conn.getResponseCode()!=200)
                                return commands;
-                       conn.getInputStream().read(buf);
-                       final JSONArray array=new JSONArray(new String(buf));
-                       final List<String> list=new ArrayList<String>();
+
+                       final JSONArray array;
+                       {
+                               final byte[] buf=new byte[4096*1024];
+                               conn.getInputStream().read(buf);
+                               array=new JSONArray(new String(buf));
+                       }
+
                        for(int i=0;i<array.length();i++){
                                final JSONObject object=array.getJSONObject(i);
 
-                               for(int j=0;object.has("arg"+j);j++)
-                                       list.add(object.getString("arg"+j));
+                               final JSONArray jsonargs=object.getJSONArray("args");
+                               final String[] args=new String[jsonargs.length()];
+                               for(int j=0;j<args.length;j++)
+                                       args[j]=jsonargs.getString(j);
 
                                commands.add(new Command(//NOPMD command changes for each JSON object
                                                toNonNull(object.getString("command")),
-                                               toNonNull(list.toArray(new String[list.size()])),
+                                               args,
                                                toNonNull(object.getString("replyto"))));
-                               list.clear();
                        }
                } catch (MalformedURLException e) {
                        e.printStackTrace();
@@ -124,7 +153,7 @@ public final class PollServerAsyncTask extends AsyncTask<Void, Void, List<PollSe
                        Log.d(getClass().getName(), "Poll got command "+command.command+" with "+((command.args.length==0)?"no args":"args "+Utils.join(
                                        " ",toNonNull(command.args))));
                        Utils.processCommand(
-                                       toNonNull(FonBotApplication.instance),
+                                       toNonNull(context),
                                        toNonNull(command.command),
                                        toNonNull(command.args),
                                        new Address(toNonNull(Protocol.HTTP), command.replyto));//NOPMD address depends on command
This page took 0.026484 seconds and 4 git commands to generate.